@nhtio/adk 1.20260607.2 → 1.20260609.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/CHANGELOG.md +185 -0
  2. package/batteries/embeddings/openai/adapter.cjs +1 -1
  3. package/batteries/embeddings/openai/adapter.mjs +1 -1
  4. package/batteries/embeddings/openai/exceptions.cjs +1 -1
  5. package/batteries/embeddings/openai/exceptions.mjs +1 -1
  6. package/batteries/embeddings/openai/types.d.ts +7 -0
  7. package/batteries/embeddings/webllm/adapter.cjs +1 -1
  8. package/batteries/embeddings/webllm/adapter.mjs +1 -1
  9. package/batteries/embeddings/webllm/exceptions.cjs +1 -1
  10. package/batteries/embeddings/webllm/exceptions.mjs +1 -1
  11. package/batteries/llm/chat_common/helpers.d.ts +165 -0
  12. package/batteries/llm/chat_common/types.d.ts +309 -0
  13. package/batteries/llm/index.d.ts +5 -0
  14. package/batteries/llm/ollama/adapter.cjs +736 -0
  15. package/batteries/llm/ollama/adapter.cjs.map +1 -0
  16. package/batteries/llm/ollama/adapter.d.ts +64 -0
  17. package/batteries/llm/ollama/adapter.mjs +734 -0
  18. package/batteries/llm/ollama/adapter.mjs.map +1 -0
  19. package/batteries/llm/ollama/exceptions.cjs +105 -0
  20. package/batteries/llm/ollama/exceptions.cjs.map +1 -0
  21. package/batteries/llm/ollama/exceptions.d.ts +112 -0
  22. package/batteries/llm/ollama/exceptions.mjs +96 -0
  23. package/batteries/llm/ollama/exceptions.mjs.map +1 -0
  24. package/batteries/llm/ollama/helpers.cjs +487 -0
  25. package/batteries/llm/ollama/helpers.cjs.map +1 -0
  26. package/batteries/llm/ollama/helpers.d.ts +158 -0
  27. package/batteries/llm/ollama/helpers.mjs +450 -0
  28. package/batteries/llm/ollama/helpers.mjs.map +1 -0
  29. package/batteries/llm/ollama/index.d.ts +29 -0
  30. package/batteries/llm/ollama/types.cjs +2 -0
  31. package/batteries/llm/ollama/types.d.ts +334 -0
  32. package/batteries/llm/ollama/types.mjs +0 -0
  33. package/batteries/llm/ollama/validation.cjs +130 -0
  34. package/batteries/llm/ollama/validation.cjs.map +1 -0
  35. package/batteries/llm/ollama/validation.d.ts +31 -0
  36. package/batteries/llm/ollama/validation.mjs +127 -0
  37. package/batteries/llm/ollama/validation.mjs.map +1 -0
  38. package/batteries/llm/ollama.cjs +54 -0
  39. package/batteries/llm/ollama.mjs +6 -0
  40. package/batteries/llm/openai_chat_completions/adapter.cjs +36 -19
  41. package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
  42. package/batteries/llm/openai_chat_completions/adapter.mjs +23 -6
  43. package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
  44. package/batteries/llm/openai_chat_completions/exceptions.cjs +1 -1
  45. package/batteries/llm/openai_chat_completions/exceptions.mjs +1 -1
  46. package/batteries/llm/openai_chat_completions/helpers.cjs +80 -320
  47. package/batteries/llm/openai_chat_completions/helpers.cjs.map +1 -1
  48. package/batteries/llm/openai_chat_completions/helpers.d.ts +68 -144
  49. package/batteries/llm/openai_chat_completions/helpers.mjs +40 -280
  50. package/batteries/llm/openai_chat_completions/helpers.mjs.map +1 -1
  51. package/batteries/llm/openai_chat_completions/types.d.ts +273 -181
  52. package/batteries/llm/openai_chat_completions/validation.cjs +2 -2
  53. package/batteries/llm/openai_chat_completions/validation.cjs.map +1 -1
  54. package/batteries/llm/openai_chat_completions/validation.mjs +2 -2
  55. package/batteries/llm/openai_chat_completions/validation.mjs.map +1 -1
  56. package/batteries/llm/openai_chat_completions.cjs +29 -28
  57. package/batteries/llm/openai_chat_completions.mjs +2 -1
  58. package/batteries/llm/webllm_chat_completions/adapter.cjs +38 -19
  59. package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
  60. package/batteries/llm/webllm_chat_completions/adapter.d.ts +18 -0
  61. package/batteries/llm/webllm_chat_completions/adapter.mjs +25 -6
  62. package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
  63. package/batteries/llm/webllm_chat_completions/exceptions.cjs +1 -1
  64. package/batteries/llm/webllm_chat_completions/exceptions.mjs +1 -1
  65. package/batteries/llm/webllm_chat_completions/helpers.cjs +29 -28
  66. package/batteries/llm/webllm_chat_completions/helpers.mjs +2 -1
  67. package/batteries/llm/webllm_chat_completions/types.d.ts +21 -0
  68. package/batteries/llm/webllm_chat_completions/validation.cjs +13 -1
  69. package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -1
  70. package/batteries/llm/webllm_chat_completions/validation.d.ts +12 -0
  71. package/batteries/llm/webllm_chat_completions/validation.mjs +13 -1
  72. package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -1
  73. package/batteries/llm/webllm_chat_completions.cjs +29 -28
  74. package/batteries/llm/webllm_chat_completions.mjs +2 -1
  75. package/batteries/llm.cjs +44 -28
  76. package/batteries/llm.mjs +9 -4
  77. package/batteries/storage/flydrive.cjs +1 -1
  78. package/batteries/storage/flydrive.mjs +1 -1
  79. package/batteries/storage/in_memory/index.d.ts +1 -1
  80. package/batteries/storage/in_memory.cjs +2 -2
  81. package/batteries/storage/in_memory.cjs.map +1 -1
  82. package/batteries/storage/in_memory.mjs +2 -2
  83. package/batteries/storage/in_memory.mjs.map +1 -1
  84. package/batteries/storage/opfs/index.d.ts +19 -0
  85. package/batteries/storage/opfs.cjs +1 -1
  86. package/batteries/storage/opfs.cjs.map +1 -1
  87. package/batteries/storage/opfs.mjs +1 -1
  88. package/batteries/storage/opfs.mjs.map +1 -1
  89. package/batteries/tools/color.cjs +3 -2
  90. package/batteries/tools/color.cjs.map +1 -1
  91. package/batteries/tools/color.mjs +3 -2
  92. package/batteries/tools/color.mjs.map +1 -1
  93. package/batteries/tools/comparison.cjs +4 -3
  94. package/batteries/tools/comparison.cjs.map +1 -1
  95. package/batteries/tools/comparison.mjs +4 -3
  96. package/batteries/tools/comparison.mjs.map +1 -1
  97. package/batteries/tools/data_structure.cjs +30 -10
  98. package/batteries/tools/data_structure.cjs.map +1 -1
  99. package/batteries/tools/data_structure.mjs +30 -10
  100. package/batteries/tools/data_structure.mjs.map +1 -1
  101. package/batteries/tools/datetime_extended.cjs +5 -10
  102. package/batteries/tools/datetime_extended.cjs.map +1 -1
  103. package/batteries/tools/datetime_extended.mjs +5 -10
  104. package/batteries/tools/datetime_extended.mjs.map +1 -1
  105. package/batteries/tools/datetime_math.cjs +2 -2
  106. package/batteries/tools/datetime_math.mjs +2 -2
  107. package/batteries/tools/encoding.cjs +13 -4
  108. package/batteries/tools/encoding.cjs.map +1 -1
  109. package/batteries/tools/encoding.mjs +13 -4
  110. package/batteries/tools/encoding.mjs.map +1 -1
  111. package/batteries/tools/formatting.cjs +4 -4
  112. package/batteries/tools/formatting.cjs.map +1 -1
  113. package/batteries/tools/formatting.mjs +4 -4
  114. package/batteries/tools/formatting.mjs.map +1 -1
  115. package/batteries/tools/geo_basics.cjs +2 -2
  116. package/batteries/tools/geo_basics.mjs +2 -2
  117. package/batteries/tools/index.d.ts +1 -0
  118. package/batteries/tools/math.cjs +10 -8
  119. package/batteries/tools/math.cjs.map +1 -1
  120. package/batteries/tools/math.mjs +10 -8
  121. package/batteries/tools/math.mjs.map +1 -1
  122. package/batteries/tools/memory.cjs +5 -5
  123. package/batteries/tools/memory.mjs +5 -5
  124. package/batteries/tools/parsing.cjs +9 -5
  125. package/batteries/tools/parsing.cjs.map +1 -1
  126. package/batteries/tools/parsing.mjs +9 -5
  127. package/batteries/tools/parsing.mjs.map +1 -1
  128. package/batteries/tools/retrievables.cjs +4 -4
  129. package/batteries/tools/retrievables.mjs +4 -4
  130. package/batteries/tools/searxng/exceptions.d.ts +21 -0
  131. package/batteries/tools/searxng/index.d.ts +150 -0
  132. package/batteries/tools/searxng.cjs +5 -0
  133. package/batteries/tools/searxng.mjs +2 -0
  134. package/batteries/tools/standing_instructions.cjs +4 -4
  135. package/batteries/tools/standing_instructions.mjs +4 -4
  136. package/batteries/tools/statistics.cjs +54 -43
  137. package/batteries/tools/statistics.cjs.map +1 -1
  138. package/batteries/tools/statistics.mjs +54 -43
  139. package/batteries/tools/statistics.mjs.map +1 -1
  140. package/batteries/tools/string_processing.cjs +5 -5
  141. package/batteries/tools/string_processing.cjs.map +1 -1
  142. package/batteries/tools/string_processing.mjs +5 -5
  143. package/batteries/tools/string_processing.mjs.map +1 -1
  144. package/batteries/tools/structured_data.cjs +8 -13
  145. package/batteries/tools/structured_data.cjs.map +1 -1
  146. package/batteries/tools/structured_data.mjs +8 -13
  147. package/batteries/tools/structured_data.mjs.map +1 -1
  148. package/batteries/tools/text_analysis.cjs +3 -3
  149. package/batteries/tools/text_analysis.mjs +3 -3
  150. package/batteries/tools/text_comparison.cjs +2 -2
  151. package/batteries/tools/text_comparison.mjs +2 -2
  152. package/batteries/tools/time.cjs +2 -2
  153. package/batteries/tools/time.mjs +2 -2
  154. package/batteries/tools/unit_conversion.cjs +10 -8
  155. package/batteries/tools/unit_conversion.cjs.map +1 -1
  156. package/batteries/tools/unit_conversion.mjs +10 -8
  157. package/batteries/tools/unit_conversion.mjs.map +1 -1
  158. package/batteries/tools.cjs +3 -0
  159. package/batteries/tools.mjs +2 -1
  160. package/batteries/vector/arangodb/index.d.ts +2 -0
  161. package/batteries/vector/arangodb.cjs +2 -1
  162. package/batteries/vector/arangodb.cjs.map +1 -1
  163. package/batteries/vector/arangodb.mjs +2 -1
  164. package/batteries/vector/arangodb.mjs.map +1 -1
  165. package/batteries/vector/builder.cjs +31 -0
  166. package/batteries/vector/builder.cjs.map +1 -1
  167. package/batteries/vector/builder.d.ts +58 -0
  168. package/batteries/vector/builder.mjs +31 -0
  169. package/batteries/vector/builder.mjs.map +1 -1
  170. package/batteries/vector/chroma/index.d.ts +4 -0
  171. package/batteries/vector/chroma.cjs +3 -0
  172. package/batteries/vector/chroma.cjs.map +1 -1
  173. package/batteries/vector/chroma.mjs +3 -0
  174. package/batteries/vector/chroma.mjs.map +1 -1
  175. package/batteries/vector/clickhouse/index.d.ts +2 -0
  176. package/batteries/vector/clickhouse.cjs +2 -1
  177. package/batteries/vector/clickhouse.cjs.map +1 -1
  178. package/batteries/vector/clickhouse.mjs +2 -1
  179. package/batteries/vector/clickhouse.mjs.map +1 -1
  180. package/batteries/vector/cloudflare/index.d.ts +2 -0
  181. package/batteries/vector/cloudflare.cjs +2 -1
  182. package/batteries/vector/cloudflare.cjs.map +1 -1
  183. package/batteries/vector/cloudflare.mjs +2 -1
  184. package/batteries/vector/cloudflare.mjs.map +1 -1
  185. package/batteries/vector/conformance/index.d.ts +22 -0
  186. package/batteries/vector/conformance.cjs +22 -0
  187. package/batteries/vector/conformance.cjs.map +1 -1
  188. package/batteries/vector/conformance.mjs +22 -0
  189. package/batteries/vector/conformance.mjs.map +1 -1
  190. package/batteries/vector/contract.cjs +22 -0
  191. package/batteries/vector/contract.cjs.map +1 -1
  192. package/batteries/vector/contract.d.ts +51 -0
  193. package/batteries/vector/contract.mjs +22 -0
  194. package/batteries/vector/contract.mjs.map +1 -1
  195. package/batteries/vector/couchbase/index.d.ts +2 -0
  196. package/batteries/vector/couchbase.cjs +2 -1
  197. package/batteries/vector/couchbase.cjs.map +1 -1
  198. package/batteries/vector/couchbase.mjs +2 -1
  199. package/batteries/vector/couchbase.mjs.map +1 -1
  200. package/batteries/vector/duckdb/index.d.ts +2 -0
  201. package/batteries/vector/duckdb.cjs +2 -1
  202. package/batteries/vector/duckdb.cjs.map +1 -1
  203. package/batteries/vector/duckdb.mjs +2 -1
  204. package/batteries/vector/duckdb.mjs.map +1 -1
  205. package/batteries/vector/elasticsearch/index.d.ts +2 -0
  206. package/batteries/vector/elasticsearch.cjs +2 -1
  207. package/batteries/vector/elasticsearch.cjs.map +1 -1
  208. package/batteries/vector/elasticsearch.mjs +2 -1
  209. package/batteries/vector/elasticsearch.mjs.map +1 -1
  210. package/batteries/vector/exceptions.cjs +1 -1
  211. package/batteries/vector/exceptions.mjs +1 -1
  212. package/batteries/vector/factory.cjs +6 -0
  213. package/batteries/vector/factory.cjs.map +1 -1
  214. package/batteries/vector/factory.d.ts +14 -0
  215. package/batteries/vector/factory.mjs +6 -0
  216. package/batteries/vector/factory.mjs.map +1 -1
  217. package/batteries/vector/filters.cjs +22 -1
  218. package/batteries/vector/filters.cjs.map +1 -1
  219. package/batteries/vector/filters.d.ts +38 -0
  220. package/batteries/vector/filters.mjs +22 -1
  221. package/batteries/vector/filters.mjs.map +1 -1
  222. package/batteries/vector/helpers.cjs +13 -0
  223. package/batteries/vector/helpers.cjs.map +1 -1
  224. package/batteries/vector/helpers.d.ts +14 -0
  225. package/batteries/vector/helpers.mjs +13 -0
  226. package/batteries/vector/helpers.mjs.map +1 -1
  227. package/batteries/vector/hnswlib/index.d.ts +2 -0
  228. package/batteries/vector/hnswlib.cjs +2 -1
  229. package/batteries/vector/hnswlib.cjs.map +1 -1
  230. package/batteries/vector/hnswlib.mjs +2 -1
  231. package/batteries/vector/hnswlib.mjs.map +1 -1
  232. package/batteries/vector/in_memory/index.d.ts +1 -0
  233. package/batteries/vector/in_memory.cjs +1 -0
  234. package/batteries/vector/in_memory.cjs.map +1 -1
  235. package/batteries/vector/in_memory.mjs +1 -0
  236. package/batteries/vector/in_memory.mjs.map +1 -1
  237. package/batteries/vector/lancedb/index.d.ts +2 -0
  238. package/batteries/vector/lancedb.cjs +2 -1
  239. package/batteries/vector/lancedb.cjs.map +1 -1
  240. package/batteries/vector/lancedb.mjs +2 -1
  241. package/batteries/vector/lancedb.mjs.map +1 -1
  242. package/batteries/vector/mariadb/index.d.ts +2 -0
  243. package/batteries/vector/mariadb.cjs +2 -1
  244. package/batteries/vector/mariadb.cjs.map +1 -1
  245. package/batteries/vector/mariadb.mjs +2 -1
  246. package/batteries/vector/mariadb.mjs.map +1 -1
  247. package/batteries/vector/meilisearch/index.d.ts +2 -0
  248. package/batteries/vector/meilisearch.cjs +2 -1
  249. package/batteries/vector/meilisearch.cjs.map +1 -1
  250. package/batteries/vector/meilisearch.mjs +2 -1
  251. package/batteries/vector/meilisearch.mjs.map +1 -1
  252. package/batteries/vector/migrate.cjs +18 -1
  253. package/batteries/vector/migrate.cjs.map +1 -1
  254. package/batteries/vector/migrate.d.ts +31 -0
  255. package/batteries/vector/migrate.mjs +18 -1
  256. package/batteries/vector/migrate.mjs.map +1 -1
  257. package/batteries/vector/milvus/index.d.ts +5 -0
  258. package/batteries/vector/milvus.cjs +4 -0
  259. package/batteries/vector/milvus.cjs.map +1 -1
  260. package/batteries/vector/milvus.mjs +4 -0
  261. package/batteries/vector/milvus.mjs.map +1 -1
  262. package/batteries/vector/mongodb/index.d.ts +2 -0
  263. package/batteries/vector/mongodb.cjs +2 -1
  264. package/batteries/vector/mongodb.cjs.map +1 -1
  265. package/batteries/vector/mongodb.mjs +2 -1
  266. package/batteries/vector/mongodb.mjs.map +1 -1
  267. package/batteries/vector/neo4j/index.d.ts +2 -0
  268. package/batteries/vector/neo4j.cjs +2 -1
  269. package/batteries/vector/neo4j.cjs.map +1 -1
  270. package/batteries/vector/neo4j.mjs +2 -1
  271. package/batteries/vector/neo4j.mjs.map +1 -1
  272. package/batteries/vector/opensearch/index.d.ts +2 -0
  273. package/batteries/vector/opensearch.cjs +2 -1
  274. package/batteries/vector/opensearch.cjs.map +1 -1
  275. package/batteries/vector/opensearch.mjs +2 -1
  276. package/batteries/vector/opensearch.mjs.map +1 -1
  277. package/batteries/vector/oracle23ai/index.d.ts +2 -0
  278. package/batteries/vector/oracle23ai.cjs +2 -1
  279. package/batteries/vector/oracle23ai.cjs.map +1 -1
  280. package/batteries/vector/oracle23ai.mjs +2 -1
  281. package/batteries/vector/oracle23ai.mjs.map +1 -1
  282. package/batteries/vector/orama/index.d.ts +1 -0
  283. package/batteries/vector/orama.cjs +1 -0
  284. package/batteries/vector/orama.cjs.map +1 -1
  285. package/batteries/vector/orama.mjs +1 -0
  286. package/batteries/vector/orama.mjs.map +1 -1
  287. package/batteries/vector/pgvector/index.d.ts +9 -2
  288. package/batteries/vector/pgvector.cjs +4 -0
  289. package/batteries/vector/pgvector.cjs.map +1 -1
  290. package/batteries/vector/pgvector.mjs +4 -0
  291. package/batteries/vector/pgvector.mjs.map +1 -1
  292. package/batteries/vector/pinecone/index.d.ts +5 -0
  293. package/batteries/vector/pinecone.cjs +3 -1
  294. package/batteries/vector/pinecone.cjs.map +1 -1
  295. package/batteries/vector/pinecone.mjs +3 -1
  296. package/batteries/vector/pinecone.mjs.map +1 -1
  297. package/batteries/vector/plan.d.ts +27 -0
  298. package/batteries/vector/qdrant/index.d.ts +5 -0
  299. package/batteries/vector/qdrant.cjs +4 -0
  300. package/batteries/vector/qdrant.cjs.map +1 -1
  301. package/batteries/vector/qdrant.mjs +4 -0
  302. package/batteries/vector/qdrant.mjs.map +1 -1
  303. package/batteries/vector/redis/index.d.ts +2 -0
  304. package/batteries/vector/redis.cjs +2 -1
  305. package/batteries/vector/redis.cjs.map +1 -1
  306. package/batteries/vector/redis.mjs +2 -1
  307. package/batteries/vector/redis.mjs.map +1 -1
  308. package/batteries/vector/retrievable.cjs +9 -1
  309. package/batteries/vector/retrievable.cjs.map +1 -1
  310. package/batteries/vector/retrievable.mjs +9 -1
  311. package/batteries/vector/retrievable.mjs.map +1 -1
  312. package/batteries/vector/retrievable_glue.d.ts +21 -0
  313. package/batteries/vector/s3vectors/index.d.ts +2 -0
  314. package/batteries/vector/s3vectors.cjs +2 -1
  315. package/batteries/vector/s3vectors.cjs.map +1 -1
  316. package/batteries/vector/s3vectors.mjs +2 -1
  317. package/batteries/vector/s3vectors.mjs.map +1 -1
  318. package/batteries/vector/schema.cjs +28 -0
  319. package/batteries/vector/schema.cjs.map +1 -1
  320. package/batteries/vector/schema.d.ts +39 -0
  321. package/batteries/vector/schema.mjs +28 -0
  322. package/batteries/vector/schema.mjs.map +1 -1
  323. package/batteries/vector/solr/index.d.ts +2 -0
  324. package/batteries/vector/solr.cjs +2 -1
  325. package/batteries/vector/solr.cjs.map +1 -1
  326. package/batteries/vector/solr.mjs +2 -1
  327. package/batteries/vector/solr.mjs.map +1 -1
  328. package/batteries/vector/sqlite_vec/index.d.ts +6 -3
  329. package/batteries/vector/sqlite_vec.cjs +2 -0
  330. package/batteries/vector/sqlite_vec.cjs.map +1 -1
  331. package/batteries/vector/sqlite_vec.mjs +2 -0
  332. package/batteries/vector/sqlite_vec.mjs.map +1 -1
  333. package/batteries/vector/surrealdb/index.d.ts +2 -0
  334. package/batteries/vector/surrealdb.cjs +2 -1
  335. package/batteries/vector/surrealdb.cjs.map +1 -1
  336. package/batteries/vector/surrealdb.mjs +2 -1
  337. package/batteries/vector/surrealdb.mjs.map +1 -1
  338. package/batteries/vector/types.d.ts +27 -0
  339. package/batteries/vector/typesense/index.d.ts +2 -0
  340. package/batteries/vector/typesense.cjs +2 -1
  341. package/batteries/vector/typesense.cjs.map +1 -1
  342. package/batteries/vector/typesense.mjs +2 -1
  343. package/batteries/vector/typesense.mjs.map +1 -1
  344. package/batteries/vector/validation.cjs +14 -0
  345. package/batteries/vector/validation.cjs.map +1 -1
  346. package/batteries/vector/validation.d.ts +14 -0
  347. package/batteries/vector/validation.mjs +14 -0
  348. package/batteries/vector/validation.mjs.map +1 -1
  349. package/batteries/vector/vector_store_constructor.cjs +1 -1
  350. package/batteries/vector/vector_store_constructor.cjs.map +1 -1
  351. package/batteries/vector/vector_store_constructor.d.ts +1 -1
  352. package/batteries/vector/vector_store_constructor.mjs +1 -1
  353. package/batteries/vector/vector_store_constructor.mjs.map +1 -1
  354. package/batteries/vector/vespa/index.d.ts +2 -0
  355. package/batteries/vector/vespa.cjs +2 -1
  356. package/batteries/vector/vespa.cjs.map +1 -1
  357. package/batteries/vector/vespa.mjs +2 -1
  358. package/batteries/vector/vespa.mjs.map +1 -1
  359. package/batteries/vector/weaviate/index.d.ts +2 -0
  360. package/batteries/vector/weaviate.cjs +2 -1
  361. package/batteries/vector/weaviate.cjs.map +1 -1
  362. package/batteries/vector/weaviate.mjs +2 -1
  363. package/batteries/vector/weaviate.mjs.map +1 -1
  364. package/batteries.cjs +46 -28
  365. package/batteries.mjs +10 -5
  366. package/{common-BT0nfCi9.mjs → common-DYDUi99O.mjs} +9 -9
  367. package/common-DYDUi99O.mjs.map +1 -0
  368. package/{common-Cj8TaQ9U.js → common-DZl3ADJs.js} +9 -9
  369. package/common-DZl3ADJs.js.map +1 -0
  370. package/common.cjs +7 -7
  371. package/common.d.ts +1 -1
  372. package/common.mjs +7 -7
  373. package/{dispatch_runner-DPcS7Y_M.mjs → dispatch_runner--ZhdDWRZ.mjs} +27 -5
  374. package/{dispatch_runner-DPcS7Y_M.mjs.map → dispatch_runner--ZhdDWRZ.mjs.map} +1 -1
  375. package/{dispatch_runner-BHBNupqp.js → dispatch_runner-nHDKkxye.js} +27 -5
  376. package/{dispatch_runner-BHBNupqp.js.map → dispatch_runner-nHDKkxye.js.map} +1 -1
  377. package/dispatch_runner.cjs +1 -1
  378. package/dispatch_runner.d.ts +1 -1
  379. package/dispatch_runner.mjs +1 -1
  380. package/eslint/rules/artifact_tool_forbids_artifact_constructor.cjs +1 -0
  381. package/eslint/rules/artifact_tool_forbids_artifact_constructor.cjs.map +1 -1
  382. package/eslint/rules/artifact_tool_forbids_artifact_constructor.d.ts +1 -0
  383. package/eslint/rules/artifact_tool_forbids_artifact_constructor.mjs +1 -0
  384. package/eslint/rules/artifact_tool_forbids_artifact_constructor.mjs.map +1 -1
  385. package/eslint/rules/no_model_in_tool_handler.cjs +1 -0
  386. package/eslint/rules/no_model_in_tool_handler.cjs.map +1 -1
  387. package/eslint/rules/no_model_in_tool_handler.d.ts +1 -0
  388. package/eslint/rules/no_model_in_tool_handler.mjs +1 -0
  389. package/eslint/rules/no_model_in_tool_handler.mjs.map +1 -1
  390. package/eslint/rules/require_validator_any_required.cjs +1 -0
  391. package/eslint/rules/require_validator_any_required.cjs.map +1 -1
  392. package/eslint/rules/require_validator_any_required.d.ts +1 -0
  393. package/eslint/rules/require_validator_any_required.mjs +1 -0
  394. package/eslint/rules/require_validator_any_required.mjs.map +1 -1
  395. package/eslint/rules/thought_payload_requires_replay_tag.cjs +1 -0
  396. package/eslint/rules/thought_payload_requires_replay_tag.cjs.map +1 -1
  397. package/eslint/rules/thought_payload_requires_replay_tag.d.ts +1 -0
  398. package/eslint/rules/thought_payload_requires_replay_tag.mjs +1 -0
  399. package/eslint/rules/thought_payload_requires_replay_tag.mjs.map +1 -1
  400. package/eslint/rules/token_encoding_requires_context_window.cjs +1 -0
  401. package/eslint/rules/token_encoding_requires_context_window.cjs.map +1 -1
  402. package/eslint/rules/token_encoding_requires_context_window.d.ts +1 -0
  403. package/eslint/rules/token_encoding_requires_context_window.mjs +1 -0
  404. package/eslint/rules/token_encoding_requires_context_window.mjs.map +1 -1
  405. package/eslint.cjs +1 -1
  406. package/eslint.mjs +1 -1
  407. package/{exceptions-BeWH2FwP.mjs → exceptions-BDhN0Xzr.mjs} +3 -2
  408. package/exceptions-BDhN0Xzr.mjs.map +1 -0
  409. package/{exceptions-CitH5wZI.js → exceptions-BRXrUKiW.js} +3 -2
  410. package/exceptions-BRXrUKiW.js.map +1 -0
  411. package/exceptions.cjs +2 -2
  412. package/exceptions.mjs +2 -2
  413. package/factories.cjs +1 -1
  414. package/factories.mjs +1 -1
  415. package/forge.cjs +4 -4
  416. package/forge.d.ts +1 -1
  417. package/forge.mjs +4 -4
  418. package/guards.cjs +9 -9
  419. package/guards.mjs +9 -9
  420. package/helpers-DSTFxTiC.js +497 -0
  421. package/helpers-DSTFxTiC.js.map +1 -0
  422. package/helpers-xhrQbMAG.mjs +306 -0
  423. package/helpers-xhrQbMAG.mjs.map +1 -0
  424. package/index.cjs +13 -13
  425. package/index.mjs +13 -13
  426. package/lib/classes/base_exception.d.ts +1 -0
  427. package/lib/classes/media.d.ts +10 -0
  428. package/lib/classes/retrievable.d.ts +1 -1
  429. package/lib/classes/spooled_json_artifact.d.ts +1 -1
  430. package/lib/classes/spooled_markdown_artifact.d.ts +1 -0
  431. package/lib/classes/tokenizable.d.ts +3 -0
  432. package/lib/classes/tool.d.ts +8 -0
  433. package/lib/classes/turn_gate.d.ts +6 -0
  434. package/lib/dispatch_runner.d.ts +4 -32
  435. package/lib/helpers/bignum.cjs +82 -0
  436. package/lib/helpers/bignum.cjs.map +1 -0
  437. package/lib/helpers/bignum.d.ts +52 -0
  438. package/lib/helpers/bignum.mjs +74 -0
  439. package/lib/helpers/bignum.mjs.map +1 -0
  440. package/lib/turn_runner.d.ts +1 -1
  441. package/lib/types/dispatch_runner.d.ts +83 -0
  442. package/lib/utils/exceptions.d.ts +1 -1
  443. package/lib/utils/retry.cjs.map +1 -1
  444. package/lib/utils/retry.d.ts +2 -0
  445. package/lib/utils/retry.mjs.map +1 -1
  446. package/mcp/adk-docs-corpus.json +1 -1
  447. package/package.json +264 -224
  448. package/{runtime-j92CNi5z.mjs → runtime-Bz5zA8wc.mjs} +2 -2
  449. package/{runtime-j92CNi5z.mjs.map → runtime-Bz5zA8wc.mjs.map} +1 -1
  450. package/{runtime-MFFcJrRv.js → runtime-DslE1aBw.js} +2 -2
  451. package/{runtime-MFFcJrRv.js.map → runtime-DslE1aBw.js.map} +1 -1
  452. package/searxng-Bkrwhwhw.js +269 -0
  453. package/searxng-Bkrwhwhw.js.map +1 -0
  454. package/searxng-CyA-nEu5.mjs +257 -0
  455. package/searxng-CyA-nEu5.mjs.map +1 -0
  456. package/skills/adk-assembly/SKILL.md +2 -2
  457. package/{spooled_artifact-CHoZgWwI.mjs → spooled_artifact-7eePq7JA.mjs} +5 -5
  458. package/{spooled_artifact-CHoZgWwI.mjs.map → spooled_artifact-7eePq7JA.mjs.map} +1 -1
  459. package/{spooled_artifact-BTq6Nzfy.js → spooled_artifact-DX8LLyUX.js} +5 -5
  460. package/{spooled_artifact-BTq6Nzfy.js.map → spooled_artifact-DX8LLyUX.js.map} +1 -1
  461. package/spooled_artifact.cjs +2 -2
  462. package/spooled_artifact.mjs +2 -2
  463. package/{spooled_markdown_artifact-CALSDxIx.js → spooled_markdown_artifact-ClX72lek.js} +4 -4
  464. package/spooled_markdown_artifact-ClX72lek.js.map +1 -0
  465. package/{spooled_markdown_artifact-Ci5UL7l4.mjs → spooled_markdown_artifact-wkrBF3oX.mjs} +4 -4
  466. package/spooled_markdown_artifact-wkrBF3oX.mjs.map +1 -0
  467. package/{thought-D34QQZZ9.mjs → thought-B_vxAiKU.mjs} +5 -5
  468. package/{thought-D34QQZZ9.mjs.map → thought-B_vxAiKU.mjs.map} +1 -1
  469. package/{thought-BbwhJ1wb.js → thought-DLwpF7MI.js} +5 -5
  470. package/{thought-BbwhJ1wb.js.map → thought-DLwpF7MI.js.map} +1 -1
  471. package/{tool-CVyZkFC7.js → tool-D5WGVIcI.js} +4 -4
  472. package/{tool-CVyZkFC7.js.map → tool-D5WGVIcI.js.map} +1 -1
  473. package/{tool-CMhaDRNd.mjs → tool-wMYMVl60.mjs} +4 -4
  474. package/{tool-CMhaDRNd.mjs.map → tool-wMYMVl60.mjs.map} +1 -1
  475. package/{tool_call-CV5qVNlb.mjs → tool_call-B4-_-vjG.mjs} +5 -5
  476. package/tool_call-B4-_-vjG.mjs.map +1 -0
  477. package/{tool_call-Db68hB7y.js → tool_call-DixVlW40.js} +5 -5
  478. package/tool_call-DixVlW40.js.map +1 -0
  479. package/{tool_registry-D1pSSlsd.mjs → tool_registry-791Vrjtf.mjs} +4 -3
  480. package/tool_registry-791Vrjtf.mjs.map +1 -0
  481. package/{tool_registry-DYUYqXvo.js → tool_registry-CKJPze3j.js} +4 -3
  482. package/tool_registry-CKJPze3j.js.map +1 -0
  483. package/{turn_runner-DqWHNP80.js → turn_runner-HXImLGIn.js} +7 -7
  484. package/turn_runner-HXImLGIn.js.map +1 -0
  485. package/{turn_runner-fg1Wc3dK.mjs → turn_runner-ZyYO-Kti.mjs} +7 -7
  486. package/turn_runner-ZyYO-Kti.mjs.map +1 -0
  487. package/turn_runner.cjs +1 -1
  488. package/turn_runner.mjs +1 -1
  489. package/types.d.ts +1 -1
  490. package/common-BT0nfCi9.mjs.map +0 -1
  491. package/common-Cj8TaQ9U.js.map +0 -1
  492. package/exceptions-BeWH2FwP.mjs.map +0 -1
  493. package/exceptions-CitH5wZI.js.map +0 -1
  494. package/spooled_markdown_artifact-CALSDxIx.js.map +0 -1
  495. package/spooled_markdown_artifact-Ci5UL7l4.mjs.map +0 -1
  496. package/tool_call-CV5qVNlb.mjs.map +0 -1
  497. package/tool_call-Db68hB7y.js.map +0 -1
  498. package/tool_registry-D1pSSlsd.mjs.map +0 -1
  499. package/tool_registry-DYUYqXvo.js.map +0 -1
  500. package/turn_runner-DqWHNP80.js.map +0 -1
  501. package/turn_runner-fg1Wc3dK.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"vespa.mjs","names":["#opts","#connected","#endpoint","#untilDate","#collections","#deploy","#configUrl","#buildPackage","#sleep","#clearCollection","#vecValues","#parseMeta","#project"],"sources":["../../../src/batteries/vector/vespa/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/vespa\n *\n * Vespa vector-store adapter. A logical collection maps to a document-type in a deployed\n * application package; the adapter maintains the application-package STATE in memory (the set of\n * live collections + their dims/metric) and redeploys the whole package on each schema change\n * via the config server (dependency-free store-zip). Feed/get/delete/search are performed over\n * the document + search HTTP APIs; scores are recomputed locally (cosineSim/dotProd/euclideanDist)\n * to guarantee the [0,1] contract regardless of backend metric quirks. Metadata is a JSON string\n * field filtered with the neutral filter tree's JS reference evaluator for cross-adapter parity.\n *\n * Vespa has NO runtime \"create collection\". A collection = a document-type declared in a .sd schema\n * file inside a deployed application package. The adapter maintains the application-package STATE\n * in memory and redeploys the whole package on each schema change via the config server.\n */\n\nimport { evaluateFilter } from '../filters'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport {\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n} from '../exceptions'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n VectorMetadata,\n DistanceMetric,\n} from '../types'\n\n// ZIP writer (no compression)\nconst crc32Table: number[] = (() => {\n const t: number[] = []\n for (let n = 0; n < 256; n++) {\n let c = n\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1\n t[n] = c >>> 0\n }\n return t\n})()\n\nconst crc32 = (buf: Buffer): number => {\n let c = 0xffffffff\n for (let i = 0; i < buf.length; i++) c = crc32Table[(c ^ buf[i]) & 0xff] ^ (c >>> 8)\n return (c ^ 0xffffffff) >>> 0\n}\n\nconst storeZip = (files: Array<{ name: string; data: Buffer }>): Buffer => {\n const locals: Buffer[] = []\n const central: Buffer[] = []\n let offset = 0\n for (const f of files) {\n const name = Buffer.from(f.name, 'utf8')\n const data = f.data\n const crc = crc32(data)\n const lh = Buffer.alloc(30)\n lh.writeUInt32LE(0x04034b50, 0)\n lh.writeUInt16LE(20, 4)\n lh.writeUInt32LE(crc, 14)\n lh.writeUInt32LE(data.length, 18)\n lh.writeUInt32LE(data.length, 22)\n lh.writeUInt16LE(name.length, 26)\n const local = Buffer.concat([lh, name, data])\n locals.push(local)\n const ch = Buffer.alloc(46)\n ch.writeUInt32LE(0x02014b50, 0)\n ch.writeUInt16LE(20, 4)\n ch.writeUInt16LE(20, 6)\n ch.writeUInt32LE(crc, 16)\n ch.writeUInt32LE(data.length, 20)\n ch.writeUInt32LE(data.length, 24)\n ch.writeUInt16LE(name.length, 28)\n ch.writeUInt32LE(offset, 42)\n central.push(Buffer.concat([ch, name]))\n offset += local.length\n }\n const cd = Buffer.concat(central)\n const localAll = Buffer.concat(locals)\n const eocd = Buffer.alloc(22)\n eocd.writeUInt32LE(0x06054b50, 0)\n eocd.writeUInt16LE(files.length, 8)\n eocd.writeUInt16LE(files.length, 10)\n eocd.writeUInt32LE(cd.length, 12)\n eocd.writeUInt32LE(localAll.length, 16)\n return Buffer.concat([localAll, cd, eocd])\n}\n\nconst metricToVespa = (metric: DistanceMetric): string =>\n metric === 'cosine' ? 'angular' : metric === 'euclidean' ? 'euclidean' : 'dotproduct'\n\nconst cosineSim = (a: number[], b: number[]): number => {\n let dot = 0\n let normA = 0\n let normB = 0\n for (const [i, av] of a.entries()) {\n const bv = b[i]\n dot += av * bv\n normA += av * av\n normB += bv * bv\n }\n const denom = Math.sqrt(normA) * Math.sqrt(normB)\n return denom === 0 ? 0 : dot / denom\n}\n\nconst dotProd = (a: number[], b: number[]): number => {\n let s = 0\n for (const [i, av] of a.entries()) {\n s += av * b[i]\n }\n return s\n}\n\nconst euclideanDist = (a: number[], b: number[]): number => {\n let s = 0\n for (const [i, av] of a.entries()) {\n const d = av - b[i]\n s += d * d\n }\n return Math.sqrt(s)\n}\n\nconst computeScore = (vec: number[], query: number[], metric: DistanceMetric): number => {\n if (metric === 'cosine') {\n const raw = cosineSim(vec, query)\n return normalizeScore(raw, 'cosine', 'similarity')\n } else if (metric === 'dot') {\n const raw = dotProd(vec, query)\n return normalizeScore(raw, 'dot', 'similarity')\n } else if (metric === 'euclidean') {\n const raw = euclideanDist(vec, query)\n return normalizeScore(raw, 'euclidean', 'distance')\n } else {\n const raw = cosineSim(vec, query)\n return normalizeScore(raw, 'cosine', 'similarity')\n }\n}\n\nexport interface VespaVectorStoreOptions extends BaseVectorStoreOptions {\n connection?: {\n endpoint?: string\n configUrl?: string\n }\n}\n\nexport class VespaVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: false,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #collections: Map<string, { dims: number; metric: DistanceMetric }> = new Map()\n #connected: boolean = false\n\n get #opts(): VespaVectorStoreOptions {\n return this.options as VespaVectorStoreOptions\n }\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n async connect(): Promise<void> {\n if (this.#connected) return\n const endpoint = this.#endpoint()\n try {\n const res = await fetch(endpoint + '/ApplicationStatus')\n if (!res.ok) {\n const body = (await res.json()) as any\n throw new E_VECTOR_STORE_CONNECTION_FAILED([\n `Vespa config server unreachable: ${body?.message ?? res.statusText}`,\n ])\n }\n } catch (err) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([String(err)])\n }\n this.#connected = true\n }\n\n async close(): Promise<void> {\n this.#connected = false\n }\n\n #endpoint(): string {\n return this.#opts.connection?.endpoint ?? 'http://localhost:8080'\n }\n\n #configUrl(): string {\n return this.#opts.connection?.configUrl ?? 'http://localhost:19071'\n }\n\n #untilDate(): string {\n return new Date(Date.now() + 25 * 86400 * 1000).toISOString().slice(0, 10)\n }\n\n #buildPackage(): Buffer {\n const files: Array<{ name: string; data: Buffer }> = []\n\n // hosts.xml (constant)\n files.push({\n name: 'hosts.xml',\n data: Buffer.from(\n '<?xml version=\"1.0\" encoding=\"utf-8\" ?>\\n<hosts><host name=\"localhost\"><alias>node1</alias></host></hosts>\\n',\n 'utf8'\n ),\n })\n\n // validation-overrides.xml\n const until = this.#untilDate()\n files.push({\n name: 'validation-overrides.xml',\n data: Buffer.from(\n `<validation-overrides>\\n <allow until=\"${until}\">schema-removal</allow>\\n <allow until=\"${until}\">field-type-change</allow>\\n <allow until=\"${until}\">indexing-change</allow>\\n</validation-overrides>\\n`,\n 'utf8'\n ),\n })\n\n // services.xml (one <document> line per live collection)\n let docLines = ''\n for (const [coll] of this.#collections) {\n docLines += ` <document type=\"${coll}\" mode=\"index\"/>\\n`\n }\n if (docLines === '') docLines = ' <document type=\"empty\" mode=\"index\"/>\\n'\n files.push({\n name: 'services.xml',\n data: Buffer.from(\n `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\\n<services version=\"1.0\">\\n <container id=\"default\" version=\"1.0\"><document-api/><search/></container>\\n <content id=\"docs\" version=\"1.0\">\\n <redundancy>1</redundancy>\\n <documents>\\n${docLines} </documents>\\n <nodes><node distribution-key=\"0\" hostalias=\"node1\"/></nodes>\\n <tuning><resource-limits><disk>0.97</disk><memory>0.95</memory></resource-limits></tuning>\\n </content>\\n</services>\\n`,\n 'utf8'\n ),\n })\n\n // schemas/<coll>.sd\n for (const [coll, spec] of this.#collections) {\n const metric = metricToVespa(spec.metric)\n const sd = `schema ${coll} {\\n document ${coll} {\\n field id type string {\\n indexing: summary | attribute\\n attribute: fast-search\\n }\\n field vec type tensor<float>(x[${spec.dims}]) {\\n indexing: summary | attribute | index\\n attribute { distance-metric: ${metric} }\\n index { hnsw { max-links-per-node: 16 neighbors-to-explore-at-insert: 100 } }\\n }\\n field document type string { indexing: summary }\\n field metadata type string { indexing: summary }\\n }\\n rank-profile vector_nearest {\\n inputs { query(q) tensor<float>(x[${spec.dims}]) }\\n first-phase { expression: closeness(field, vec) }\\n }\\n}\\n`\n files.push({\n name: `schemas/${coll}.sd`,\n data: Buffer.from(sd, 'utf8'),\n })\n }\n\n return storeZip(files)\n }\n\n async #deploy(): Promise<void> {\n const url = this.#configUrl() + '/application/v2/tenant/default/prepareandactivate'\n const pkg = this.#buildPackage()\n // fetch's BodyInit doesn't accept a Node Buffer directly under the DOM lib types; a Uint8Array\n // view over the same bytes is an accepted BodyInit and avoids a copy.\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/zip' },\n // The installed DOM lib's BodyInit doesn't list Uint8Array, but the runtime (undici/Node)\n // accepts a typed-array body fine — cast through the accepted union.\n body: new Uint8Array(pkg.buffer, pkg.byteOffset, pkg.byteLength) as unknown as BodyInit,\n })\n if (!res.ok) {\n const data = (await res.json()) as any\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['deploy', data?.message ?? `HTTP ${res.status}`])\n }\n // Poll ApplicationStatus until 200\n const endpoint = this.#endpoint()\n for (let i = 0; i < 60; i++) {\n try {\n const sres = await fetch(endpoint + '/ApplicationStatus')\n if (sres.ok) return\n } catch {\n // continue polling\n }\n await this.#sleep(1000)\n }\n }\n\n async #sleep(ms: number): Promise<void> {\n await new Promise((r) => setTimeout(r, ms))\n }\n\n #vecValues(field: any): number[] {\n if (field?.values && Array.isArray(field.values)) return field.values\n if (field?.cells && Array.isArray(field.cells)) {\n return field.cells.map((c: any) => c.value)\n }\n return []\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n const coll = spec.collection\n if (this.#collections.has(coll)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'createCollection',\n `collection already exists: ${coll}`,\n ])\n }\n this.#collections.set(coll, { dims: spec.vector.dimensions, metric: spec.vector.metric })\n try {\n await this.#deploy()\n // Wait for schema to be query-ready\n const endpoint = this.#endpoint()\n for (let i = 0; i < 30; i++) {\n try {\n const q = encodeURIComponent(`select id from ${coll} where true`)\n const res = await fetch(`${endpoint}/search/?yql=${q}&hits=1`)\n if (res.ok) break\n } catch {\n // continue polling\n }\n await this.#sleep(500)\n }\n // Clear any residual documents (redeploy preserves data)\n await this.#clearCollection(coll)\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['createCollection', String(err)])\n }\n }\n\n async #clearCollection(coll: string): Promise<void> {\n try {\n const endpoint = this.#endpoint()\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid?selection=true&cluster=docs`,\n {\n method: 'DELETE',\n }\n )\n if (!res.ok) {\n const body = (await res.json()) as any\n // Ignore 404 for non-existing collection\n if (body?.message?.includes('No document type') || res.status === 404) {\n return\n }\n }\n } catch {\n // Ignore errors during clear\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n if (!this.#collections.has(collection)) {\n if (ifExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'dropCollection',\n `collection not found: ${collection}`,\n ])\n }\n try {\n await this.#clearCollection(collection)\n this.#collections.delete(collection)\n if (this.#collections.size === 0) {\n // Do not redeploy an empty content cluster; just forget it locally\n return\n }\n await this.#deploy()\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['dropCollection', String(err)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n return this.#collections.has(collection)\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'vespa'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n if (plan.records.length === 0) return\n validateRecords(plan.records)\n const coll = plan.collection\n const endpoint = this.#endpoint()\n const dims = this.#opts.dimensions ?? this.#collections.get(coll)?.dims\n try {\n const ids = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) {\n throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n }\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n const body = {\n fields: {\n id: r.id,\n vec: { values: vector },\n document: r.document ?? '',\n metadata: r.metadata ? JSON.stringify(r.metadata) : '{}',\n },\n }\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(r.id)}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n }\n )\n if (!res.ok) {\n const errData = (await res.json()) as any\n throw new Error(errData?.message ?? `HTTP ${res.status}`)\n }\n ids.push(r.id)\n }\n // Brief settle for HNSW index\n await this.#sleep(500)\n } catch (err) {\n if (\n isInstanceOf(err, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH) ||\n isInstanceOf(err, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)\n ) {\n throw err\n }\n throw new E_VECTOR_STORE_UPSERT_FAILED([String(err)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n const coll = plan.collection\n const endpoint = this.#endpoint()\n const metric = this.#collections.get(coll)?.metric ?? this.#opts.metric ?? 'cosine'\n let queryVector: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) {\n queryVector = plan.near.vector\n } else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n queryVector = v\n } else if ('id' in plan.near) {\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(plan.near.id)}`\n )\n if (!res.ok) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n const data = (await res.json()) as any\n const vec = this.#vecValues(data.fields?.vec)\n if (!vec || vec.length === 0) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n queryVector = vec\n }\n }\n\n const offset = plan.offset ?? 0\n const topK = plan.topK ?? 10\n const k = plan.filter ? 400 : topK + offset\n const yql = queryVector\n ? `select id, document, metadata, vec from ${coll} where {targetHits:${k}}nearestNeighbor(vec, q)`\n : `select id, document, metadata, vec from ${coll} where true`\n\n try {\n const body: any = {\n yql,\n hits: k,\n }\n if (queryVector) {\n body['input.query(q)'] = queryVector\n body['ranking.profile'] = 'vector_nearest'\n }\n const res = await fetch(`${endpoint}/search/`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`)\n }\n const data = (await res.json()) as any\n const root = data.root as any\n const children = root.children ?? []\n\n if (queryVector) {\n const filtered = children\n .filter((c: any) =>\n evaluateFilter(plan.filter ?? {}, this.#parseMeta(c.fields?.metadata))\n )\n .map((c: any) => {\n const vec = this.#vecValues(c.fields?.vec)\n const score = computeScore(vec, queryVector, metric)\n return { ...c.fields, score }\n })\n filtered.sort((a: any, b: any) => b.score - a.score)\n return filtered.slice(offset, offset + topK).map((d: any) => this.#project(d, plan, true))\n } else {\n const filtered = children.filter((c: any) =>\n evaluateFilter(plan.filter ?? {}, this.#parseMeta(c.fields?.metadata))\n )\n return filtered.slice(offset, offset + topK).map((d: any) => this.#project(d, plan, false))\n }\n } catch (err) {\n if ((err as any)?.message?.includes('Referenced id not found')) {\n throw err\n }\n throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n const coll = plan.collection\n const endpoint = this.#endpoint()\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) {\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(id)}`,\n { method: 'DELETE' }\n )\n if (!res.ok && res.status !== 404) {\n const body = (await res.json()) as any\n throw new Error(body?.message ?? `HTTP ${res.status}`)\n }\n }\n } else if (plan.filter) {\n const yql = `select id, metadata, vec from ${coll} where true`\n const res = await fetch(`${endpoint}/search/`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ yql, hits: 400 }),\n })\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`)\n }\n const data = (await res.json()) as any\n const children = data.root.children ?? []\n const targets = children\n .filter((c: any) => evaluateFilter(plan.filter!, this.#parseMeta(c.fields?.metadata)))\n .map((c: any) => c.fields?.id)\n for (const id of targets) {\n await fetch(`${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n })\n }\n } else {\n await fetch(`${endpoint}/document/v1/default/${coll}/docid?selection=true&cluster=docs`, {\n method: 'DELETE',\n })\n }\n } catch (err) {\n throw new E_VECTOR_STORE_DELETE_FAILED([String(err)])\n }\n }\n\n #parseMeta(val: unknown): VectorMetadata {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as VectorMetadata\n } catch {\n return {}\n }\n }\n if (val && typeof val === 'object') return val as VectorMetadata\n return {}\n }\n\n #project(doc: any, plan: SearchPlan, hasScore: boolean): VectorMatch {\n const proj = plan.projection\n const out: VectorMatch = {}\n if (proj.id) out.id = doc.id as string\n if (proj.vector) {\n const vec = this.#vecValues(doc.vec)\n if (vec && vec.length > 0) out.vector = vec.map(Number)\n }\n if (proj.document) out.document = (doc.document ?? undefined) as string | undefined\n if (proj.metadata) out.metadata = this.#parseMeta(doc.metadata)\n if (hasScore && typeof doc.score === 'number') {\n out.score = doc.score\n }\n return out\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"vespa.mjs","names":["#opts","#connected","#endpoint","#untilDate","#collections","#deploy","#configUrl","#buildPackage","#sleep","#clearCollection","#vecValues","#parseMeta","#project"],"sources":["../../../src/batteries/vector/vespa/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/vespa\n *\n * Vespa vector-store adapter. A logical collection maps to a document-type in a deployed\n * application package; the adapter maintains the application-package STATE in memory (the set of\n * live collections + their dims/metric) and redeploys the whole package on each schema change\n * via the config server (dependency-free store-zip). Feed/get/delete/search are performed over\n * the document + search HTTP APIs; scores are recomputed locally (cosineSim/dotProd/euclideanDist)\n * to guarantee the [0,1] contract regardless of backend metric quirks. Metadata is a JSON string\n * field filtered with the neutral filter tree's JS reference evaluator for cross-adapter parity.\n *\n * Vespa has NO runtime \"create collection\". A collection = a document-type declared in a .sd schema\n * file inside a deployed application package. The adapter maintains the application-package STATE\n * in memory and redeploys the whole package on each schema change via the config server.\n */\n\nimport { evaluateFilter } from '../filters'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport {\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n} from '../exceptions'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n VectorMetadata,\n DistanceMetric,\n} from '../types'\n\n// ZIP writer (no compression)\nconst crc32Table: number[] = (() => {\n const t: number[] = []\n for (let n = 0; n < 256; n++) {\n let c = n\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1\n t[n] = c >>> 0\n }\n return t\n})()\n\nconst crc32 = (buf: Buffer): number => {\n let c = 0xffffffff\n for (let i = 0; i < buf.length; i++) c = crc32Table[(c ^ buf[i]) & 0xff] ^ (c >>> 8)\n return (c ^ 0xffffffff) >>> 0\n}\n\nconst storeZip = (files: Array<{ name: string; data: Buffer }>): Buffer => {\n const locals: Buffer[] = []\n const central: Buffer[] = []\n let offset = 0\n for (const f of files) {\n const name = Buffer.from(f.name, 'utf8')\n const data = f.data\n const crc = crc32(data)\n const lh = Buffer.alloc(30)\n lh.writeUInt32LE(0x04034b50, 0)\n lh.writeUInt16LE(20, 4)\n lh.writeUInt32LE(crc, 14)\n lh.writeUInt32LE(data.length, 18)\n lh.writeUInt32LE(data.length, 22)\n lh.writeUInt16LE(name.length, 26)\n const local = Buffer.concat([lh, name, data])\n locals.push(local)\n const ch = Buffer.alloc(46)\n ch.writeUInt32LE(0x02014b50, 0)\n ch.writeUInt16LE(20, 4)\n ch.writeUInt16LE(20, 6)\n ch.writeUInt32LE(crc, 16)\n ch.writeUInt32LE(data.length, 20)\n ch.writeUInt32LE(data.length, 24)\n ch.writeUInt16LE(name.length, 28)\n ch.writeUInt32LE(offset, 42)\n central.push(Buffer.concat([ch, name]))\n offset += local.length\n }\n const cd = Buffer.concat(central)\n const localAll = Buffer.concat(locals)\n const eocd = Buffer.alloc(22)\n eocd.writeUInt32LE(0x06054b50, 0)\n eocd.writeUInt16LE(files.length, 8)\n eocd.writeUInt16LE(files.length, 10)\n eocd.writeUInt32LE(cd.length, 12)\n eocd.writeUInt32LE(localAll.length, 16)\n return Buffer.concat([localAll, cd, eocd])\n}\n\nconst metricToVespa = (metric: DistanceMetric): string =>\n metric === 'cosine' ? 'angular' : metric === 'euclidean' ? 'euclidean' : 'dotproduct'\n\nconst cosineSim = (a: number[], b: number[]): number => {\n let dot = 0\n let normA = 0\n let normB = 0\n for (const [i, av] of a.entries()) {\n const bv = b[i]\n dot += av * bv\n normA += av * av\n normB += bv * bv\n }\n const denom = Math.sqrt(normA) * Math.sqrt(normB)\n return denom === 0 ? 0 : dot / denom\n}\n\nconst dotProd = (a: number[], b: number[]): number => {\n let s = 0\n for (const [i, av] of a.entries()) {\n s += av * b[i]\n }\n return s\n}\n\nconst euclideanDist = (a: number[], b: number[]): number => {\n let s = 0\n for (const [i, av] of a.entries()) {\n const d = av - b[i]\n s += d * d\n }\n return Math.sqrt(s)\n}\n\nconst computeScore = (vec: number[], query: number[], metric: DistanceMetric): number => {\n if (metric === 'cosine') {\n const raw = cosineSim(vec, query)\n return normalizeScore(raw, 'cosine', 'similarity')\n } else if (metric === 'dot') {\n const raw = dotProd(vec, query)\n return normalizeScore(raw, 'dot', 'similarity')\n } else if (metric === 'euclidean') {\n const raw = euclideanDist(vec, query)\n return normalizeScore(raw, 'euclidean', 'distance')\n } else {\n const raw = cosineSim(vec, query)\n return normalizeScore(raw, 'cosine', 'similarity')\n }\n}\n\nexport interface VespaVectorStoreOptions extends BaseVectorStoreOptions {\n /** Connection and authentication parameters for the backend. */\n connection?: {\n endpoint?: string\n configUrl?: string\n }\n}\n\nexport class VespaVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: false,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #collections: Map<string, { dims: number; metric: DistanceMetric }> = new Map()\n #connected: boolean = false\n\n get #opts(): VespaVectorStoreOptions {\n return this.options as VespaVectorStoreOptions\n }\n\n /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */\n static isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n async connect(): Promise<void> {\n if (this.#connected) return\n const endpoint = this.#endpoint()\n try {\n const res = await fetch(endpoint + '/ApplicationStatus')\n if (!res.ok) {\n const body = (await res.json()) as any\n throw new E_VECTOR_STORE_CONNECTION_FAILED([\n `Vespa config server unreachable: ${body?.message ?? res.statusText}`,\n ])\n }\n } catch (err) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([String(err)])\n }\n this.#connected = true\n }\n\n async close(): Promise<void> {\n this.#connected = false\n }\n\n #endpoint(): string {\n return this.#opts.connection?.endpoint ?? 'http://localhost:8080'\n }\n\n #configUrl(): string {\n return this.#opts.connection?.configUrl ?? 'http://localhost:19071'\n }\n\n #untilDate(): string {\n return new Date(Date.now() + 25 * 86400 * 1000).toISOString().slice(0, 10)\n }\n\n #buildPackage(): Buffer {\n const files: Array<{ name: string; data: Buffer }> = []\n\n // hosts.xml (constant)\n files.push({\n name: 'hosts.xml',\n data: Buffer.from(\n '<?xml version=\"1.0\" encoding=\"utf-8\" ?>\\n<hosts><host name=\"localhost\"><alias>node1</alias></host></hosts>\\n',\n 'utf8'\n ),\n })\n\n // validation-overrides.xml\n const until = this.#untilDate()\n files.push({\n name: 'validation-overrides.xml',\n data: Buffer.from(\n `<validation-overrides>\\n <allow until=\"${until}\">schema-removal</allow>\\n <allow until=\"${until}\">field-type-change</allow>\\n <allow until=\"${until}\">indexing-change</allow>\\n</validation-overrides>\\n`,\n 'utf8'\n ),\n })\n\n // services.xml (one <document> line per live collection)\n let docLines = ''\n for (const [coll] of this.#collections) {\n docLines += ` <document type=\"${coll}\" mode=\"index\"/>\\n`\n }\n if (docLines === '') docLines = ' <document type=\"empty\" mode=\"index\"/>\\n'\n files.push({\n name: 'services.xml',\n data: Buffer.from(\n `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\\n<services version=\"1.0\">\\n <container id=\"default\" version=\"1.0\"><document-api/><search/></container>\\n <content id=\"docs\" version=\"1.0\">\\n <redundancy>1</redundancy>\\n <documents>\\n${docLines} </documents>\\n <nodes><node distribution-key=\"0\" hostalias=\"node1\"/></nodes>\\n <tuning><resource-limits><disk>0.97</disk><memory>0.95</memory></resource-limits></tuning>\\n </content>\\n</services>\\n`,\n 'utf8'\n ),\n })\n\n // schemas/<coll>.sd\n for (const [coll, spec] of this.#collections) {\n const metric = metricToVespa(spec.metric)\n const sd = `schema ${coll} {\\n document ${coll} {\\n field id type string {\\n indexing: summary | attribute\\n attribute: fast-search\\n }\\n field vec type tensor<float>(x[${spec.dims}]) {\\n indexing: summary | attribute | index\\n attribute { distance-metric: ${metric} }\\n index { hnsw { max-links-per-node: 16 neighbors-to-explore-at-insert: 100 } }\\n }\\n field document type string { indexing: summary }\\n field metadata type string { indexing: summary }\\n }\\n rank-profile vector_nearest {\\n inputs { query(q) tensor<float>(x[${spec.dims}]) }\\n first-phase { expression: closeness(field, vec) }\\n }\\n}\\n`\n files.push({\n name: `schemas/${coll}.sd`,\n data: Buffer.from(sd, 'utf8'),\n })\n }\n\n return storeZip(files)\n }\n\n async #deploy(): Promise<void> {\n const url = this.#configUrl() + '/application/v2/tenant/default/prepareandactivate'\n const pkg = this.#buildPackage()\n // fetch's BodyInit doesn't accept a Node Buffer directly under the DOM lib types; a Uint8Array\n // view over the same bytes is an accepted BodyInit and avoids a copy.\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/zip' },\n // The installed DOM lib's BodyInit doesn't list Uint8Array, but the runtime (undici/Node)\n // accepts a typed-array body fine — cast through the accepted union.\n body: new Uint8Array(pkg.buffer, pkg.byteOffset, pkg.byteLength) as unknown as BodyInit,\n })\n if (!res.ok) {\n const data = (await res.json()) as any\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['deploy', data?.message ?? `HTTP ${res.status}`])\n }\n // Poll ApplicationStatus until 200\n const endpoint = this.#endpoint()\n for (let i = 0; i < 60; i++) {\n try {\n const sres = await fetch(endpoint + '/ApplicationStatus')\n if (sres.ok) return\n } catch {\n // continue polling\n }\n await this.#sleep(1000)\n }\n }\n\n async #sleep(ms: number): Promise<void> {\n await new Promise((r) => setTimeout(r, ms))\n }\n\n #vecValues(field: any): number[] {\n if (field?.values && Array.isArray(field.values)) return field.values\n if (field?.cells && Array.isArray(field.cells)) {\n return field.cells.map((c: any) => c.value)\n }\n return []\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n const coll = spec.collection\n if (this.#collections.has(coll)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'createCollection',\n `collection already exists: ${coll}`,\n ])\n }\n this.#collections.set(coll, { dims: spec.vector.dimensions, metric: spec.vector.metric })\n try {\n await this.#deploy()\n // Wait for schema to be query-ready\n const endpoint = this.#endpoint()\n for (let i = 0; i < 30; i++) {\n try {\n const q = encodeURIComponent(`select id from ${coll} where true`)\n const res = await fetch(`${endpoint}/search/?yql=${q}&hits=1`)\n if (res.ok) break\n } catch {\n // continue polling\n }\n await this.#sleep(500)\n }\n // Clear any residual documents (redeploy preserves data)\n await this.#clearCollection(coll)\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['createCollection', String(err)])\n }\n }\n\n async #clearCollection(coll: string): Promise<void> {\n try {\n const endpoint = this.#endpoint()\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid?selection=true&cluster=docs`,\n {\n method: 'DELETE',\n }\n )\n if (!res.ok) {\n const body = (await res.json()) as any\n // Ignore 404 for non-existing collection\n if (body?.message?.includes('No document type') || res.status === 404) {\n return\n }\n }\n } catch {\n // Ignore errors during clear\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n if (!this.#collections.has(collection)) {\n if (ifExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'dropCollection',\n `collection not found: ${collection}`,\n ])\n }\n try {\n await this.#clearCollection(collection)\n this.#collections.delete(collection)\n if (this.#collections.size === 0) {\n // Do not redeploy an empty content cluster; just forget it locally\n return\n }\n await this.#deploy()\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['dropCollection', String(err)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n return this.#collections.has(collection)\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'vespa'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n if (plan.records.length === 0) return\n validateRecords(plan.records)\n const coll = plan.collection\n const endpoint = this.#endpoint()\n const dims = this.#opts.dimensions ?? this.#collections.get(coll)?.dims\n try {\n const ids = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) {\n throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n }\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n const body = {\n fields: {\n id: r.id,\n vec: { values: vector },\n document: r.document ?? '',\n metadata: r.metadata ? JSON.stringify(r.metadata) : '{}',\n },\n }\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(r.id)}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n }\n )\n if (!res.ok) {\n const errData = (await res.json()) as any\n throw new Error(errData?.message ?? `HTTP ${res.status}`)\n }\n ids.push(r.id)\n }\n // Brief settle for HNSW index\n await this.#sleep(500)\n } catch (err) {\n if (\n isInstanceOf(err, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH) ||\n isInstanceOf(err, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)\n ) {\n throw err\n }\n throw new E_VECTOR_STORE_UPSERT_FAILED([String(err)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n const coll = plan.collection\n const endpoint = this.#endpoint()\n const metric = this.#collections.get(coll)?.metric ?? this.#opts.metric ?? 'cosine'\n let queryVector: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) {\n queryVector = plan.near.vector\n } else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n queryVector = v\n } else if ('id' in plan.near) {\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(plan.near.id)}`\n )\n if (!res.ok) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n const data = (await res.json()) as any\n const vec = this.#vecValues(data.fields?.vec)\n if (!vec || vec.length === 0) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n queryVector = vec\n }\n }\n\n const offset = plan.offset ?? 0\n const topK = plan.topK ?? 10\n const k = plan.filter ? 400 : topK + offset\n const yql = queryVector\n ? `select id, document, metadata, vec from ${coll} where {targetHits:${k}}nearestNeighbor(vec, q)`\n : `select id, document, metadata, vec from ${coll} where true`\n\n try {\n const body: any = {\n yql,\n hits: k,\n }\n if (queryVector) {\n body['input.query(q)'] = queryVector\n body['ranking.profile'] = 'vector_nearest'\n }\n const res = await fetch(`${endpoint}/search/`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`)\n }\n const data = (await res.json()) as any\n const root = data.root as any\n const children = root.children ?? []\n\n if (queryVector) {\n const filtered = children\n .filter((c: any) =>\n evaluateFilter(plan.filter ?? {}, this.#parseMeta(c.fields?.metadata))\n )\n .map((c: any) => {\n const vec = this.#vecValues(c.fields?.vec)\n const score = computeScore(vec, queryVector, metric)\n return { ...c.fields, score }\n })\n filtered.sort((a: any, b: any) => b.score - a.score)\n return filtered.slice(offset, offset + topK).map((d: any) => this.#project(d, plan, true))\n } else {\n const filtered = children.filter((c: any) =>\n evaluateFilter(plan.filter ?? {}, this.#parseMeta(c.fields?.metadata))\n )\n return filtered.slice(offset, offset + topK).map((d: any) => this.#project(d, plan, false))\n }\n } catch (err) {\n if ((err as any)?.message?.includes('Referenced id not found')) {\n throw err\n }\n throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n const coll = plan.collection\n const endpoint = this.#endpoint()\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) {\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(id)}`,\n { method: 'DELETE' }\n )\n if (!res.ok && res.status !== 404) {\n const body = (await res.json()) as any\n throw new Error(body?.message ?? `HTTP ${res.status}`)\n }\n }\n } else if (plan.filter) {\n const yql = `select id, metadata, vec from ${coll} where true`\n const res = await fetch(`${endpoint}/search/`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ yql, hits: 400 }),\n })\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`)\n }\n const data = (await res.json()) as any\n const children = data.root.children ?? []\n const targets = children\n .filter((c: any) => evaluateFilter(plan.filter!, this.#parseMeta(c.fields?.metadata)))\n .map((c: any) => c.fields?.id)\n for (const id of targets) {\n await fetch(`${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n })\n }\n } else {\n await fetch(`${endpoint}/document/v1/default/${coll}/docid?selection=true&cluster=docs`, {\n method: 'DELETE',\n })\n }\n } catch (err) {\n throw new E_VECTOR_STORE_DELETE_FAILED([String(err)])\n }\n }\n\n #parseMeta(val: unknown): VectorMetadata {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as VectorMetadata\n } catch {\n return {}\n }\n }\n if (val && typeof val === 'object') return val as VectorMetadata\n return {}\n }\n\n #project(doc: any, plan: SearchPlan, hasScore: boolean): VectorMatch {\n const proj = plan.projection\n const out: VectorMatch = {}\n if (proj.id) out.id = doc.id as string\n if (proj.vector) {\n const vec = this.#vecValues(doc.vec)\n if (vec && vec.length > 0) out.vector = vec.map(Number)\n }\n if (proj.document) out.document = (doc.document ?? undefined) as string | undefined\n if (proj.metadata) out.metadata = this.#parseMeta(doc.metadata)\n if (hasScore && typeof doc.score === 'number') {\n out.score = doc.score\n }\n return out\n }\n}\n"],"mappings":"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"}
@@ -13,6 +13,7 @@ import type { VectorMatch, VectorStoreCapabilities, BaseVectorStoreOptions } fro
13
13
  * Connection options for {@link WeaviateVectorStore}.
14
14
  */
15
15
  export interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {
16
+ /** Connection and authentication parameters for the backend. */
16
17
  connection?: {
17
18
  url?: string;
18
19
  host?: string;
@@ -43,6 +44,7 @@ export declare const translateWeaviateFilter: (col: any, weaviate: any, filter?:
43
44
  export declare class WeaviateVectorStore extends BaseVectorStore {
44
45
  #private;
45
46
  readonly capabilities: VectorStoreCapabilities;
47
+ /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */
46
48
  static isAvailable(): boolean;
47
49
  isAvailable(): boolean;
48
50
  connect(): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Ble4zEEl.js");
3
- const require_tool_registry = require("../../tool_registry-DYUYqXvo.js");
3
+ const require_tool_registry = require("../../tool_registry-CKJPze3j.js");
4
4
  require("../../guards.cjs");
5
5
  const require_batteries_vector_filters = require("./filters.cjs");
6
6
  const require_batteries_vector_helpers = require("./helpers.cjs");
@@ -87,6 +87,7 @@ var WeaviateVectorStore = class extends require_batteries_vector_contract.BaseVe
87
87
  #client = null;
88
88
  #weaviate = null;
89
89
  #dims = /* @__PURE__ */ new Map();
90
+ /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */
90
91
  static isAvailable() {
91
92
  return typeof process !== "undefined";
92
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"weaviate.cjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n connection?: {\n url?: string\n host?: string\n port?: number\n grpcHost?: string\n grpcPort?: number\n apiKey?: string\n secure?: boolean\n grpcSecure?: boolean\n }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n * for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'weaviate') return filter.$raw\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined && op !== 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n const f = col.filter.byProperty(field)\n if (op === 'eq') return f.equal(value)\n if (op === 'ne') return f.notEqual(value)\n if (op === 'gt') return f.greaterThan(value)\n if (op === 'gte') return f.greaterOrEqual(value)\n if (op === 'lt') return f.lessThan(value)\n if (op === 'lte') return f.lessOrEqual(value)\n if (op === 'in') return f.containsAny(value)\n if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n if (op === 'exists') return f.isNull(value === false)\n if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.and(...children)\n }\n if (or) {\n const children = or\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.or(...children)\n }\n if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n return undefined\n }\n return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: true,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n // (A future multi-node adapter variant would set configurable:true.)\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #client: any = null\n #weaviate: any = null\n #dims = new Map<string, number>()\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#client) return\n let weaviate: any\n try {\n const weaviateMod = await import('weaviate-client')\n weaviate = weaviateMod.default\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n }\n const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n let httpHost = c.host ?? 'localhost'\n let httpPort = c.port ?? 8080\n let secure = c.secure\n if (c.url) {\n const u = new URL(c.url)\n httpHost = u.hostname\n httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n secure = u.protocol === 'https:'\n }\n try {\n this.#client = await weaviate.connectToCustom({\n httpHost,\n httpPort,\n httpSecure: !!secure,\n grpcHost: c.grpcHost ?? httpHost,\n grpcPort: c.grpcPort ?? 50051,\n grpcSecure: !!c.grpcSecure,\n headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n })\n this.#weaviate = weaviate\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n }\n\n async close(): Promise<void> {\n await this.#client?.close?.()\n this.#client = null\n this.#weaviate = null\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(spec.collection)\n try {\n if (await this.#client.collections.exists(c)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n await this.#client.collections.create({\n name: c,\n vectorizers: this.#weaviate.configure.vectorizer.none(),\n properties: [\n { name: '__id', dataType: 'text' },\n { name: '__document', dataType: 'text' },\n { name: '__metadata', dataType: 'text' },\n ],\n })\n this.#dims.set(spec.collection, spec.vector.dimensions)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(collection)\n try {\n const exists = await this.#client.collections.exists(c)\n if (!exists) {\n if (!ifExists)\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n return\n }\n await this.#client.collections.delete(c)\n this.#dims.delete(collection)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n return await this.#client.collections.exists(this.#cls(collection))\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n const objects = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n objects.push({\n id: this.#uuidFromId(r.id),\n properties: {\n __id: r.id,\n __document: r.document ?? '',\n __metadata: JSON.stringify(r.metadata ?? {}),\n },\n vectors: vector,\n })\n }\n if (objects.length > 0) await col.data.insertMany(objects)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n throw e\n if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\n throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n const metric = this.options.metric ?? 'cosine'\n try {\n let qvec: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) qvec = plan.near.vector\n else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n qvec = v\n } else if ('id' in plan.near) {\n const ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n includeVector: true,\n })\n qvec = this.#extractVector(ref?.vectors)\n }\n }\n let res: any\n if (qvec) {\n res = await col.query.nearVector(qvec, {\n limit: (plan.topK + (plan.offset ?? 0)) * 4,\n returnMetadata: ['distance'],\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n } else {\n res = await col.query.fetchObjects({\n limit: 10000,\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n }\n const filtered = (res.objects ?? []).filter((obj: any) => {\n const metadata = this.#parseMetadata(obj)\n return !plan.filter || evaluateFilter(plan.filter, metadata)\n })\n const start = plan.offset ?? 0\n return filtered\n .slice(start, start + plan.topK)\n .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\n } catch (e: any) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n return\n }\n const res = await col.query.fetchObjects({\n limit: 10000,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n for (const obj of res.objects ?? []) {\n const id = obj.properties?.__id\n if (!id) continue\n if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n await col.data.deleteById(this.#uuidFromId(id))\n }\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n #cls(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1)\n }\n\n #uuidFromId(id: string): string {\n const h = sha256(id)\n return (\n h.slice(0, 8) +\n '-' +\n h.slice(8, 12) +\n '-4' +\n h.slice(13, 16) +\n '-8' +\n h.slice(17, 20) +\n '-' +\n h.slice(20, 32)\n )\n }\n\n #parseMetadata(obj: any): VectorMetadata {\n try {\n return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n } catch {\n return {}\n }\n }\n\n #extractVector(vectors: any): number[] | undefined {\n if (Array.isArray(vectors)) return vectors as number[]\n if (vectors?.default) return vectors.default as number[]\n if (vectors && typeof vectors === 'object')\n return Object.values(vectors)[0] as number[] | undefined\n return undefined\n }\n\n #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n const out: VectorMatch = {}\n const props = obj.properties ?? {}\n if (plan.projection.id) out.id = props.__id\n if (plan.projection.document) out.document = props.__document\n if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n if (scored)\n out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n return out\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"weaviate.cjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n /** Connection and authentication parameters for the backend. */\n connection?: {\n url?: string\n host?: string\n port?: number\n grpcHost?: string\n grpcPort?: number\n apiKey?: string\n secure?: boolean\n grpcSecure?: boolean\n }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n * for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'weaviate') return filter.$raw\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined && op !== 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n const f = col.filter.byProperty(field)\n if (op === 'eq') return f.equal(value)\n if (op === 'ne') return f.notEqual(value)\n if (op === 'gt') return f.greaterThan(value)\n if (op === 'gte') return f.greaterOrEqual(value)\n if (op === 'lt') return f.lessThan(value)\n if (op === 'lte') return f.lessOrEqual(value)\n if (op === 'in') return f.containsAny(value)\n if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n if (op === 'exists') return f.isNull(value === false)\n if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.and(...children)\n }\n if (or) {\n const children = or\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.or(...children)\n }\n if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n return undefined\n }\n return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: true,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n // (A future multi-node adapter variant would set configurable:true.)\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #client: any = null\n #weaviate: any = null\n #dims = new Map<string, number>()\n\n /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#client) return\n let weaviate: any\n try {\n const weaviateMod = await import('weaviate-client')\n weaviate = weaviateMod.default\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n }\n const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n let httpHost = c.host ?? 'localhost'\n let httpPort = c.port ?? 8080\n let secure = c.secure\n if (c.url) {\n const u = new URL(c.url)\n httpHost = u.hostname\n httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n secure = u.protocol === 'https:'\n }\n try {\n this.#client = await weaviate.connectToCustom({\n httpHost,\n httpPort,\n httpSecure: !!secure,\n grpcHost: c.grpcHost ?? httpHost,\n grpcPort: c.grpcPort ?? 50051,\n grpcSecure: !!c.grpcSecure,\n headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n })\n this.#weaviate = weaviate\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n }\n\n async close(): Promise<void> {\n await this.#client?.close?.()\n this.#client = null\n this.#weaviate = null\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(spec.collection)\n try {\n if (await this.#client.collections.exists(c)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n await this.#client.collections.create({\n name: c,\n vectorizers: this.#weaviate.configure.vectorizer.none(),\n properties: [\n { name: '__id', dataType: 'text' },\n { name: '__document', dataType: 'text' },\n { name: '__metadata', dataType: 'text' },\n ],\n })\n this.#dims.set(spec.collection, spec.vector.dimensions)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(collection)\n try {\n const exists = await this.#client.collections.exists(c)\n if (!exists) {\n if (!ifExists)\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n return\n }\n await this.#client.collections.delete(c)\n this.#dims.delete(collection)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n return await this.#client.collections.exists(this.#cls(collection))\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n const objects = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n objects.push({\n id: this.#uuidFromId(r.id),\n properties: {\n __id: r.id,\n __document: r.document ?? '',\n __metadata: JSON.stringify(r.metadata ?? {}),\n },\n vectors: vector,\n })\n }\n if (objects.length > 0) await col.data.insertMany(objects)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n throw e\n if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\n throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n const metric = this.options.metric ?? 'cosine'\n try {\n let qvec: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) qvec = plan.near.vector\n else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n qvec = v\n } else if ('id' in plan.near) {\n const ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n includeVector: true,\n })\n qvec = this.#extractVector(ref?.vectors)\n }\n }\n let res: any\n if (qvec) {\n res = await col.query.nearVector(qvec, {\n limit: (plan.topK + (plan.offset ?? 0)) * 4,\n returnMetadata: ['distance'],\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n } else {\n res = await col.query.fetchObjects({\n limit: 10000,\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n }\n const filtered = (res.objects ?? []).filter((obj: any) => {\n const metadata = this.#parseMetadata(obj)\n return !plan.filter || evaluateFilter(plan.filter, metadata)\n })\n const start = plan.offset ?? 0\n return filtered\n .slice(start, start + plan.topK)\n .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\n } catch (e: any) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n return\n }\n const res = await col.query.fetchObjects({\n limit: 10000,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n for (const obj of res.objects ?? []) {\n const id = obj.properties?.__id\n if (!id) continue\n if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n await col.data.deleteById(this.#uuidFromId(id))\n }\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n #cls(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1)\n }\n\n #uuidFromId(id: string): string {\n const h = sha256(id)\n return (\n h.slice(0, 8) +\n '-' +\n h.slice(8, 12) +\n '-4' +\n h.slice(13, 16) +\n '-8' +\n h.slice(17, 20) +\n '-' +\n h.slice(20, 32)\n )\n }\n\n #parseMetadata(obj: any): VectorMetadata {\n try {\n return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n } catch {\n return {}\n }\n }\n\n #extractVector(vectors: any): number[] | undefined {\n if (Array.isArray(vectors)) return vectors as number[]\n if (vectors?.default) return vectors.default as number[]\n if (vectors && typeof vectors === 'object')\n return Object.values(vectors)[0] as number[] | undefined\n return undefined\n }\n\n #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n const out: VectorMatch = {}\n const props = obj.properties ?? {}\n if (plan.projection.id) out.id = props.__id\n if (plan.projection.document) out.document = props.__document\n if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n if (scored)\n out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n return out\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { s as isInstanceOf } from "../../tool_registry-D1pSSlsd.mjs";
1
+ import { s as isInstanceOf } from "../../tool_registry-791Vrjtf.mjs";
2
2
  import "../../guards.mjs";
3
3
  import { evaluateFilter, isFilterCondition, isFilterGroup, isRawFilter } from "./filters.mjs";
4
4
  import { normalizeScore } from "./helpers.mjs";
@@ -85,6 +85,7 @@ var WeaviateVectorStore = class extends BaseVectorStore {
85
85
  #client = null;
86
86
  #weaviate = null;
87
87
  #dims = /* @__PURE__ */ new Map();
88
+ /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */
88
89
  static isAvailable() {
89
90
  return typeof process !== "undefined";
90
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"weaviate.mjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n connection?: {\n url?: string\n host?: string\n port?: number\n grpcHost?: string\n grpcPort?: number\n apiKey?: string\n secure?: boolean\n grpcSecure?: boolean\n }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n * for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'weaviate') return filter.$raw\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined && op !== 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n const f = col.filter.byProperty(field)\n if (op === 'eq') return f.equal(value)\n if (op === 'ne') return f.notEqual(value)\n if (op === 'gt') return f.greaterThan(value)\n if (op === 'gte') return f.greaterOrEqual(value)\n if (op === 'lt') return f.lessThan(value)\n if (op === 'lte') return f.lessOrEqual(value)\n if (op === 'in') return f.containsAny(value)\n if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n if (op === 'exists') return f.isNull(value === false)\n if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.and(...children)\n }\n if (or) {\n const children = or\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.or(...children)\n }\n if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n return undefined\n }\n return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: true,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n // (A future multi-node adapter variant would set configurable:true.)\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #client: any = null\n #weaviate: any = null\n #dims = new Map<string, number>()\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#client) return\n let weaviate: any\n try {\n const weaviateMod = await import('weaviate-client')\n weaviate = weaviateMod.default\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n }\n const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n let httpHost = c.host ?? 'localhost'\n let httpPort = c.port ?? 8080\n let secure = c.secure\n if (c.url) {\n const u = new URL(c.url)\n httpHost = u.hostname\n httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n secure = u.protocol === 'https:'\n }\n try {\n this.#client = await weaviate.connectToCustom({\n httpHost,\n httpPort,\n httpSecure: !!secure,\n grpcHost: c.grpcHost ?? httpHost,\n grpcPort: c.grpcPort ?? 50051,\n grpcSecure: !!c.grpcSecure,\n headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n })\n this.#weaviate = weaviate\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n }\n\n async close(): Promise<void> {\n await this.#client?.close?.()\n this.#client = null\n this.#weaviate = null\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(spec.collection)\n try {\n if (await this.#client.collections.exists(c)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n await this.#client.collections.create({\n name: c,\n vectorizers: this.#weaviate.configure.vectorizer.none(),\n properties: [\n { name: '__id', dataType: 'text' },\n { name: '__document', dataType: 'text' },\n { name: '__metadata', dataType: 'text' },\n ],\n })\n this.#dims.set(spec.collection, spec.vector.dimensions)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(collection)\n try {\n const exists = await this.#client.collections.exists(c)\n if (!exists) {\n if (!ifExists)\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n return\n }\n await this.#client.collections.delete(c)\n this.#dims.delete(collection)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n return await this.#client.collections.exists(this.#cls(collection))\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n const objects = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n objects.push({\n id: this.#uuidFromId(r.id),\n properties: {\n __id: r.id,\n __document: r.document ?? '',\n __metadata: JSON.stringify(r.metadata ?? {}),\n },\n vectors: vector,\n })\n }\n if (objects.length > 0) await col.data.insertMany(objects)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n throw e\n if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\n throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n const metric = this.options.metric ?? 'cosine'\n try {\n let qvec: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) qvec = plan.near.vector\n else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n qvec = v\n } else if ('id' in plan.near) {\n const ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n includeVector: true,\n })\n qvec = this.#extractVector(ref?.vectors)\n }\n }\n let res: any\n if (qvec) {\n res = await col.query.nearVector(qvec, {\n limit: (plan.topK + (plan.offset ?? 0)) * 4,\n returnMetadata: ['distance'],\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n } else {\n res = await col.query.fetchObjects({\n limit: 10000,\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n }\n const filtered = (res.objects ?? []).filter((obj: any) => {\n const metadata = this.#parseMetadata(obj)\n return !plan.filter || evaluateFilter(plan.filter, metadata)\n })\n const start = plan.offset ?? 0\n return filtered\n .slice(start, start + plan.topK)\n .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\n } catch (e: any) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n return\n }\n const res = await col.query.fetchObjects({\n limit: 10000,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n for (const obj of res.objects ?? []) {\n const id = obj.properties?.__id\n if (!id) continue\n if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n await col.data.deleteById(this.#uuidFromId(id))\n }\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n #cls(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1)\n }\n\n #uuidFromId(id: string): string {\n const h = sha256(id)\n return (\n h.slice(0, 8) +\n '-' +\n h.slice(8, 12) +\n '-4' +\n h.slice(13, 16) +\n '-8' +\n h.slice(17, 20) +\n '-' +\n h.slice(20, 32)\n )\n }\n\n #parseMetadata(obj: any): VectorMetadata {\n try {\n return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n } catch {\n return {}\n }\n }\n\n #extractVector(vectors: any): number[] | undefined {\n if (Array.isArray(vectors)) return vectors as number[]\n if (vectors?.default) return vectors.default as number[]\n if (vectors && typeof vectors === 'object')\n return Object.values(vectors)[0] as number[] | undefined\n return undefined\n }\n\n #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n const out: VectorMatch = {}\n const props = obj.properties ?? {}\n if (plan.projection.id) out.id = props.__id\n if (plan.projection.document) out.document = props.__document\n if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n if (scored)\n out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n return out\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"weaviate.mjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n /** Connection and authentication parameters for the backend. */\n connection?: {\n url?: string\n host?: string\n port?: number\n grpcHost?: string\n grpcPort?: number\n apiKey?: string\n secure?: boolean\n grpcSecure?: boolean\n }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n * for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'weaviate') return filter.$raw\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined && op !== 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n const f = col.filter.byProperty(field)\n if (op === 'eq') return f.equal(value)\n if (op === 'ne') return f.notEqual(value)\n if (op === 'gt') return f.greaterThan(value)\n if (op === 'gte') return f.greaterOrEqual(value)\n if (op === 'lt') return f.lessThan(value)\n if (op === 'lte') return f.lessOrEqual(value)\n if (op === 'in') return f.containsAny(value)\n if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n if (op === 'exists') return f.isNull(value === false)\n if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.and(...children)\n }\n if (or) {\n const children = or\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.or(...children)\n }\n if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n return undefined\n }\n return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: true,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n // (A future multi-node adapter variant would set configurable:true.)\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #client: any = null\n #weaviate: any = null\n #dims = new Map<string, number>()\n\n /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#client) return\n let weaviate: any\n try {\n const weaviateMod = await import('weaviate-client')\n weaviate = weaviateMod.default\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n }\n const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n let httpHost = c.host ?? 'localhost'\n let httpPort = c.port ?? 8080\n let secure = c.secure\n if (c.url) {\n const u = new URL(c.url)\n httpHost = u.hostname\n httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n secure = u.protocol === 'https:'\n }\n try {\n this.#client = await weaviate.connectToCustom({\n httpHost,\n httpPort,\n httpSecure: !!secure,\n grpcHost: c.grpcHost ?? httpHost,\n grpcPort: c.grpcPort ?? 50051,\n grpcSecure: !!c.grpcSecure,\n headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n })\n this.#weaviate = weaviate\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n }\n\n async close(): Promise<void> {\n await this.#client?.close?.()\n this.#client = null\n this.#weaviate = null\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(spec.collection)\n try {\n if (await this.#client.collections.exists(c)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n await this.#client.collections.create({\n name: c,\n vectorizers: this.#weaviate.configure.vectorizer.none(),\n properties: [\n { name: '__id', dataType: 'text' },\n { name: '__document', dataType: 'text' },\n { name: '__metadata', dataType: 'text' },\n ],\n })\n this.#dims.set(spec.collection, spec.vector.dimensions)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(collection)\n try {\n const exists = await this.#client.collections.exists(c)\n if (!exists) {\n if (!ifExists)\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n return\n }\n await this.#client.collections.delete(c)\n this.#dims.delete(collection)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n return await this.#client.collections.exists(this.#cls(collection))\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n const objects = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n objects.push({\n id: this.#uuidFromId(r.id),\n properties: {\n __id: r.id,\n __document: r.document ?? '',\n __metadata: JSON.stringify(r.metadata ?? {}),\n },\n vectors: vector,\n })\n }\n if (objects.length > 0) await col.data.insertMany(objects)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n throw e\n if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\n throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n const metric = this.options.metric ?? 'cosine'\n try {\n let qvec: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) qvec = plan.near.vector\n else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n qvec = v\n } else if ('id' in plan.near) {\n const ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n includeVector: true,\n })\n qvec = this.#extractVector(ref?.vectors)\n }\n }\n let res: any\n if (qvec) {\n res = await col.query.nearVector(qvec, {\n limit: (plan.topK + (plan.offset ?? 0)) * 4,\n returnMetadata: ['distance'],\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n } else {\n res = await col.query.fetchObjects({\n limit: 10000,\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n }\n const filtered = (res.objects ?? []).filter((obj: any) => {\n const metadata = this.#parseMetadata(obj)\n return !plan.filter || evaluateFilter(plan.filter, metadata)\n })\n const start = plan.offset ?? 0\n return filtered\n .slice(start, start + plan.topK)\n .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\n } catch (e: any) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n return\n }\n const res = await col.query.fetchObjects({\n limit: 10000,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n for (const obj of res.objects ?? []) {\n const id = obj.properties?.__id\n if (!id) continue\n if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n await col.data.deleteById(this.#uuidFromId(id))\n }\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n #cls(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1)\n }\n\n #uuidFromId(id: string): string {\n const h = sha256(id)\n return (\n h.slice(0, 8) +\n '-' +\n h.slice(8, 12) +\n '-4' +\n h.slice(13, 16) +\n '-8' +\n h.slice(17, 20) +\n '-' +\n h.slice(20, 32)\n )\n }\n\n #parseMetadata(obj: any): VectorMetadata {\n try {\n return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n } catch {\n return {}\n }\n }\n\n #extractVector(vectors: any): number[] | undefined {\n if (Array.isArray(vectors)) return vectors as number[]\n if (vectors?.default) return vectors.default as number[]\n if (vectors && typeof vectors === 'object')\n return Object.values(vectors)[0] as number[] | undefined\n return undefined\n }\n\n #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n const out: VectorMatch = {}\n const props = obj.properties ?? {}\n if (plan.projection.id) out.id = props.__id\n if (plan.projection.document) out.document = props.__document\n if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n if (scored)\n out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n return out\n }\n}\n"],"mappings":"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"}
package/batteries.cjs CHANGED
@@ -2,11 +2,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Ble4zEEl.js");
3
3
  const require_batteries_llm_openai_chat_completions_exceptions = require("./batteries/llm/openai_chat_completions/exceptions.cjs");
4
4
  const require_batteries_llm_openai_chat_completions_validation = require("./batteries/llm/openai_chat_completions/validation.cjs");
5
+ const require_helpers = require("./helpers-DSTFxTiC.js");
5
6
  const require_batteries_llm_openai_chat_completions_helpers = require("./batteries/llm/openai_chat_completions/helpers.cjs");
6
7
  const require_batteries_llm_openai_chat_completions_adapter = require("./batteries/llm/openai_chat_completions/adapter.cjs");
7
8
  const require_batteries_llm_webllm_chat_completions_exceptions = require("./batteries/llm/webllm_chat_completions/exceptions.cjs");
8
9
  const require_batteries_llm_webllm_chat_completions_validation = require("./batteries/llm/webllm_chat_completions/validation.cjs");
9
10
  const require_batteries_llm_webllm_chat_completions_adapter = require("./batteries/llm/webllm_chat_completions/adapter.cjs");
11
+ const require_batteries_llm_ollama_exceptions = require("./batteries/llm/ollama/exceptions.cjs");
12
+ const require_batteries_llm_ollama_validation = require("./batteries/llm/ollama/validation.cjs");
13
+ const require_batteries_llm_ollama_adapter = require("./batteries/llm/ollama/adapter.cjs");
10
14
  require("./batteries/llm.cjs");
11
15
  const require_batteries_tools_color = require("./batteries/tools/color.cjs");
12
16
  const require_batteries_tools_comparison = require("./batteries/tools/comparison.cjs");
@@ -20,6 +24,7 @@ const require_batteries_tools_math = require("./batteries/tools/math.cjs");
20
24
  const require_batteries_tools_memory = require("./batteries/tools/memory.cjs");
21
25
  const require_batteries_tools_parsing = require("./batteries/tools/parsing.cjs");
22
26
  const require_batteries_tools_retrievables = require("./batteries/tools/retrievables.cjs");
27
+ const require_searxng = require("./searxng-Bkrwhwhw.js");
23
28
  const require_batteries_tools_standing_instructions = require("./batteries/tools/standing_instructions.cjs");
24
29
  const require_batteries_tools_statistics = require("./batteries/tools/statistics.cjs");
25
30
  const require_batteries_tools_string_processing = require("./batteries/tools/string_processing.cjs");
@@ -50,11 +55,20 @@ const require_batteries_vector_orama = require("./batteries/vector/orama.cjs");
50
55
  require("./batteries/vector.cjs");
51
56
  exports.BaseVectorStore = require_batteries_vector_contract.BaseVectorStore;
52
57
  exports.CollectionBuilder = require_batteries_vector_schema.CollectionBuilder;
58
+ exports.E_INVALID_OLLAMA_OPTIONS = require_batteries_llm_ollama_exceptions.E_INVALID_OLLAMA_OPTIONS;
53
59
  exports.E_INVALID_OPENAI_CHAT_COMPLETIONS_OPTIONS = require_batteries_llm_openai_chat_completions_exceptions.E_INVALID_OPENAI_CHAT_COMPLETIONS_OPTIONS;
54
60
  exports.E_INVALID_OPENAI_EMBEDDINGS_OPTIONS = require_batteries_embeddings_openai_exceptions.E_INVALID_OPENAI_EMBEDDINGS_OPTIONS;
61
+ exports.E_INVALID_SEARXNG_CONFIG = require_searxng.E_INVALID_SEARXNG_CONFIG;
55
62
  exports.E_INVALID_VECTOR_RECORD = require_batteries_vector_exceptions.E_INVALID_VECTOR_RECORD;
56
63
  exports.E_INVALID_VECTOR_STORE_CONFIG = require_batteries_vector_exceptions.E_INVALID_VECTOR_STORE_CONFIG;
57
64
  exports.E_INVALID_WEBLLM_CHAT_COMPLETIONS_OPTIONS = require_batteries_llm_webllm_chat_completions_exceptions.E_INVALID_WEBLLM_CHAT_COMPLETIONS_OPTIONS;
65
+ exports.E_OLLAMA_CONTEXT_OVERFLOW = require_batteries_llm_ollama_exceptions.E_OLLAMA_CONTEXT_OVERFLOW;
66
+ exports.E_OLLAMA_HTTP_ERROR = require_batteries_llm_ollama_exceptions.E_OLLAMA_HTTP_ERROR;
67
+ exports.E_OLLAMA_INVALID_TOOL_CALL_ARGS = require_batteries_llm_ollama_exceptions.E_OLLAMA_INVALID_TOOL_CALL_ARGS;
68
+ exports.E_OLLAMA_REQUEST_TIMEOUT = require_batteries_llm_ollama_exceptions.E_OLLAMA_REQUEST_TIMEOUT;
69
+ exports.E_OLLAMA_STREAM_ERROR = require_batteries_llm_ollama_exceptions.E_OLLAMA_STREAM_ERROR;
70
+ exports.E_OLLAMA_STREAM_STALLED = require_batteries_llm_ollama_exceptions.E_OLLAMA_STREAM_STALLED;
71
+ exports.E_OLLAMA_UNSUPPORTED_MEDIA_MODALITY = require_batteries_llm_ollama_exceptions.E_OLLAMA_UNSUPPORTED_MEDIA_MODALITY;
58
72
  exports.E_OPENAI_CHAT_COMPLETIONS_CONTEXT_OVERFLOW = require_batteries_llm_openai_chat_completions_exceptions.E_OPENAI_CHAT_COMPLETIONS_CONTEXT_OVERFLOW;
59
73
  exports.E_OPENAI_CHAT_COMPLETIONS_HTTP_ERROR = require_batteries_llm_openai_chat_completions_exceptions.E_OPENAI_CHAT_COMPLETIONS_HTTP_ERROR;
60
74
  exports.E_OPENAI_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS = require_batteries_llm_openai_chat_completions_exceptions.E_OPENAI_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS;
@@ -85,6 +99,7 @@ exports.E_WEBLLM_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS = require_batteries_llm
85
99
  exports.E_WEBLLM_CHAT_COMPLETIONS_STREAM_ERROR = require_batteries_llm_webllm_chat_completions_exceptions.E_WEBLLM_CHAT_COMPLETIONS_STREAM_ERROR;
86
100
  exports.FilterBuilder = require_batteries_vector_builder.FilterBuilder;
87
101
  exports.InMemoryVectorStore = require_batteries_vector_in_memory.InMemoryVectorStore;
102
+ exports.OllamaAdapter = require_batteries_llm_ollama_adapter.OllamaAdapter;
88
103
  exports.OpenAIChatCompletionsAdapter = require_batteries_llm_openai_chat_completions_adapter.OpenAIChatCompletionsAdapter;
89
104
  exports.OpenAIEmbeddingsAdapter = require_batteries_embeddings_openai_adapter.OpenAIEmbeddingsAdapter;
90
105
  exports.OramaVectorStore = require_batteries_vector_orama.OramaVectorStore;
@@ -106,6 +121,7 @@ exports.compareValuesTool = require_batteries_tools_comparison.compareValuesTool
106
121
  exports.convertTimeTool = require_batteries_tools_time.convertTimeTool;
107
122
  exports.convertUnitTool = require_batteries_tools_unit_conversion.convertUnitTool;
108
123
  exports.createChatCompletionsToolCallDeltaAccumulator = require_batteries_llm_openai_chat_completions_helpers.createChatCompletionsToolCallDeltaAccumulator;
124
+ exports.createSearxngSearchTool = require_searxng.createSearxngSearchTool;
109
125
  exports.createVectorRetrievableCallbacks = require_batteries_vector_retrievable.createVectorRetrievableCallbacks;
110
126
  exports.createVectorStore = require_batteries_vector_factory.createVectorStore;
111
127
  exports.dateAddTool = require_batteries_tools_datetime_math.dateAddTool;
@@ -117,25 +133,25 @@ exports.dateParseTool = require_batteries_tools_datetime_extended.dateParseTool;
117
133
  exports.datePeriodTool = require_batteries_tools_datetime_extended.datePeriodTool;
118
134
  exports.defaultBuildChatCompletionsHistory = require_batteries_llm_openai_chat_completions_helpers.defaultBuildChatCompletionsHistory;
119
135
  exports.defaultCreateChatCompletionsToolCallDeltaAccumulator = require_batteries_llm_openai_chat_completions_helpers.defaultCreateChatCompletionsToolCallDeltaAccumulator;
120
- exports.defaultDescriptionToChatCompletionsJsonSchema = require_batteries_llm_openai_chat_completions_helpers.defaultDescriptionToChatCompletionsJsonSchema;
121
- exports.defaultFilterThoughts = require_batteries_llm_openai_chat_completions_helpers.defaultFilterThoughts;
122
- exports.defaultRenderChatCompletionsSystemPrompt = require_batteries_llm_openai_chat_completions_helpers.defaultRenderChatCompletionsSystemPrompt;
136
+ exports.defaultDescriptionToChatCompletionsJsonSchema = require_helpers.defaultDescriptionToChatCompletionsJsonSchema;
137
+ exports.defaultFilterThoughts = require_helpers.defaultFilterThoughts;
138
+ exports.defaultRenderChatCompletionsSystemPrompt = require_helpers.defaultRenderChatCompletionsSystemPrompt;
123
139
  exports.defaultRenderChatCompletionsToolCallResult = require_batteries_llm_openai_chat_completions_helpers.defaultRenderChatCompletionsToolCallResult;
124
- exports.defaultRenderFirstPartyRetrievables = require_batteries_llm_openai_chat_completions_helpers.defaultRenderFirstPartyRetrievables;
125
- exports.defaultRenderMemories = require_batteries_llm_openai_chat_completions_helpers.defaultRenderMemories;
126
- exports.defaultRenderRetrievableSafetyDirective = require_batteries_llm_openai_chat_completions_helpers.defaultRenderRetrievableSafetyDirective;
127
- exports.defaultRenderRetrievables = require_batteries_llm_openai_chat_completions_helpers.defaultRenderRetrievables;
128
- exports.defaultRenderStandingInstructions = require_batteries_llm_openai_chat_completions_helpers.defaultRenderStandingInstructions;
129
- exports.defaultRenderThirdPartyPrivateRetrievables = require_batteries_llm_openai_chat_completions_helpers.defaultRenderThirdPartyPrivateRetrievables;
130
- exports.defaultRenderThirdPartyPublicRetrievables = require_batteries_llm_openai_chat_completions_helpers.defaultRenderThirdPartyPublicRetrievables;
131
- exports.defaultRenderThought = require_batteries_llm_openai_chat_completions_helpers.defaultRenderThought;
140
+ exports.defaultRenderFirstPartyRetrievables = require_helpers.defaultRenderFirstPartyRetrievables;
141
+ exports.defaultRenderMemories = require_helpers.defaultRenderMemories;
142
+ exports.defaultRenderRetrievableSafetyDirective = require_helpers.defaultRenderRetrievableSafetyDirective;
143
+ exports.defaultRenderRetrievables = require_helpers.defaultRenderRetrievables;
144
+ exports.defaultRenderStandingInstructions = require_helpers.defaultRenderStandingInstructions;
145
+ exports.defaultRenderThirdPartyPrivateRetrievables = require_helpers.defaultRenderThirdPartyPrivateRetrievables;
146
+ exports.defaultRenderThirdPartyPublicRetrievables = require_helpers.defaultRenderThirdPartyPublicRetrievables;
147
+ exports.defaultRenderThought = require_helpers.defaultRenderThought;
132
148
  exports.defaultRenderTimelineMessage = require_batteries_llm_openai_chat_completions_helpers.defaultRenderTimelineMessage;
133
- exports.defaultRenderTrustedContent = require_batteries_llm_openai_chat_completions_helpers.defaultRenderTrustedContent;
134
- exports.defaultRenderUntrustedContent = require_batteries_llm_openai_chat_completions_helpers.defaultRenderUntrustedContent;
135
- exports.defaultToolsToChatCompletionsTools = require_batteries_llm_openai_chat_completions_helpers.defaultToolsToChatCompletionsTools;
149
+ exports.defaultRenderTrustedContent = require_helpers.defaultRenderTrustedContent;
150
+ exports.defaultRenderUntrustedContent = require_helpers.defaultRenderUntrustedContent;
151
+ exports.defaultToolsToChatCompletionsTools = require_helpers.defaultToolsToChatCompletionsTools;
136
152
  exports.deleteMemoryTool = require_batteries_tools_memory.deleteMemoryTool;
137
153
  exports.deleteRetrievableTool = require_batteries_tools_retrievables.deleteRetrievableTool;
138
- exports.descriptionToChatCompletionsJsonSchema = require_batteries_llm_openai_chat_completions_helpers.descriptionToChatCompletionsJsonSchema;
154
+ exports.descriptionToChatCompletionsJsonSchema = require_helpers.descriptionToChatCompletionsJsonSchema;
139
155
  exports.detectDelimiterTool = require_batteries_tools_parsing.detectDelimiterTool;
140
156
  exports.dimensionsMatch = require_batteries_vector_helpers.dimensionsMatch;
141
157
  exports.durationFormatTool = require_batteries_tools_datetime_math.durationFormatTool;
@@ -144,7 +160,7 @@ exports.encoderFromEmbeddings = require_batteries_vector_factory.encoderFromEmbe
144
160
  exports.evaluateFilter = require_batteries_vector_filters.evaluateFilter;
145
161
  exports.evaluateKatexTool = require_batteries_tools_math.evaluateKatexTool;
146
162
  exports.extractReasoningFields = require_batteries_llm_openai_chat_completions_helpers.extractReasoningFields;
147
- exports.filterThoughts = require_batteries_llm_openai_chat_completions_helpers.filterThoughts;
163
+ exports.filterThoughts = require_helpers.filterThoughts;
148
164
  exports.formatListTool = require_batteries_tools_formatting.formatListTool;
149
165
  exports.formatNumberTool = require_batteries_tools_formatting.formatNumberTool;
150
166
  exports.formatTableTool = require_batteries_tools_structured_data.formatTableTool;
@@ -166,6 +182,7 @@ exports.listStandingInstructionsTool = require_batteries_tools_standing_instruct
166
182
  exports.mapMetric = require_batteries_vector_helpers.mapMetric;
167
183
  exports.memoryTools = require_batteries_tools_memory.memoryTools;
168
184
  exports.normalizeScore = require_batteries_vector_helpers.normalizeScore;
185
+ exports.ollamaOptionsSchema = require_batteries_llm_ollama_validation.ollamaOptionsSchema;
169
186
  exports.openAIChatCompletionsOptionsSchema = require_batteries_llm_openai_chat_completions_validation.openAIChatCompletionsOptionsSchema;
170
187
  exports.openAIEmbeddingsOptionsSchema = require_batteries_embeddings_openai_validation.openAIEmbeddingsOptionsSchema;
171
188
  exports.parseCsvTool = require_batteries_tools_parsing.parseCsvTool;
@@ -173,19 +190,19 @@ exports.parseKvTool = require_batteries_tools_parsing.parseKvTool;
173
190
  exports.parseYamlTool = require_batteries_tools_parsing.parseYamlTool;
174
191
  exports.raw = require_batteries_vector_filters.raw;
175
192
  exports.removeStandingInstructionTool = require_batteries_tools_standing_instructions.removeStandingInstructionTool;
176
- exports.renderChatCompletionsSystemPrompt = require_batteries_llm_openai_chat_completions_helpers.renderChatCompletionsSystemPrompt;
193
+ exports.renderChatCompletionsSystemPrompt = require_helpers.renderChatCompletionsSystemPrompt;
177
194
  exports.renderChatCompletionsToolCallResult = require_batteries_llm_openai_chat_completions_helpers.renderChatCompletionsToolCallResult;
178
- exports.renderFirstPartyRetrievables = require_batteries_llm_openai_chat_completions_helpers.renderFirstPartyRetrievables;
179
- exports.renderMemories = require_batteries_llm_openai_chat_completions_helpers.renderMemories;
180
- exports.renderRetrievableSafetyDirective = require_batteries_llm_openai_chat_completions_helpers.renderRetrievableSafetyDirective;
181
- exports.renderRetrievables = require_batteries_llm_openai_chat_completions_helpers.renderRetrievables;
182
- exports.renderStandingInstructions = require_batteries_llm_openai_chat_completions_helpers.renderStandingInstructions;
183
- exports.renderThirdPartyPrivateRetrievables = require_batteries_llm_openai_chat_completions_helpers.renderThirdPartyPrivateRetrievables;
184
- exports.renderThirdPartyPublicRetrievables = require_batteries_llm_openai_chat_completions_helpers.renderThirdPartyPublicRetrievables;
185
- exports.renderThought = require_batteries_llm_openai_chat_completions_helpers.renderThought;
195
+ exports.renderFirstPartyRetrievables = require_helpers.renderFirstPartyRetrievables;
196
+ exports.renderMemories = require_helpers.renderMemories;
197
+ exports.renderRetrievableSafetyDirective = require_helpers.renderRetrievableSafetyDirective;
198
+ exports.renderRetrievables = require_helpers.renderRetrievables;
199
+ exports.renderStandingInstructions = require_helpers.renderStandingInstructions;
200
+ exports.renderThirdPartyPrivateRetrievables = require_helpers.renderThirdPartyPrivateRetrievables;
201
+ exports.renderThirdPartyPublicRetrievables = require_helpers.renderThirdPartyPublicRetrievables;
202
+ exports.renderThought = require_helpers.renderThought;
186
203
  exports.renderTimelineMessage = require_batteries_llm_openai_chat_completions_helpers.renderTimelineMessage;
187
- exports.renderTrustedContent = require_batteries_llm_openai_chat_completions_helpers.renderTrustedContent;
188
- exports.renderUntrustedContent = require_batteries_llm_openai_chat_completions_helpers.renderUntrustedContent;
204
+ exports.renderTrustedContent = require_helpers.renderTrustedContent;
205
+ exports.renderUntrustedContent = require_helpers.renderUntrustedContent;
189
206
  exports.resolveClientCtor = require_batteries_vector_validation.resolveClientCtor;
190
207
  exports.retrievableTools = require_batteries_tools_retrievables.retrievableTools;
191
208
  exports.setOperationsTool = require_batteries_tools_data_structure.setOperationsTool;
@@ -203,12 +220,13 @@ exports.textAnalyzeTool = require_batteries_tools_text_analysis.textAnalyzeTool;
203
220
  exports.textDiffTool = require_batteries_tools_text_comparison.textDiffTool;
204
221
  exports.textEscapeTool = require_batteries_tools_encoding.textEscapeTool;
205
222
  exports.textLinesTool = require_batteries_tools_text_analysis.textLinesTool;
206
- exports.toolsToChatCompletionsTools = require_batteries_llm_openai_chat_completions_helpers.toolsToChatCompletionsTools;
223
+ exports.toolsToChatCompletionsTools = require_helpers.toolsToChatCompletionsTools;
207
224
  exports.unicodeNormalizeTool = require_batteries_tools_encoding.unicodeNormalizeTool;
208
225
  exports.updateMemoryTool = require_batteries_tools_memory.updateMemoryTool;
209
226
  exports.updateRetrievableTool = require_batteries_tools_retrievables.updateRetrievableTool;
210
227
  exports.validateCreateConfig = require_batteries_vector_validation.validateCreateConfig;
211
228
  exports.validateFormatTool = require_batteries_tools_structured_data.validateFormatTool;
229
+ exports.validateOllamaOptions = require_batteries_llm_ollama_validation.validateOptions;
212
230
  exports.validateOpenAIEmbeddingsOptions = require_batteries_embeddings_openai_validation.validateOptions;
213
231
  exports.validateOptions = require_batteries_llm_openai_chat_completions_validation.validateOptions;
214
232
  exports.validateRecords = require_batteries_vector_validation.validateRecords;