@compresr/sdk 1.3.1 → 1.5.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 (347) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +237 -173
  3. package/dist/cjs/agents/engine.d.ts +121 -0
  4. package/dist/cjs/agents/engine.d.ts.map +1 -0
  5. package/dist/cjs/agents/engine.js +517 -0
  6. package/dist/cjs/agents/engine.js.map +1 -0
  7. package/dist/cjs/agents/facades/anthropic.d.ts +26 -0
  8. package/dist/cjs/agents/facades/anthropic.d.ts.map +1 -0
  9. package/dist/cjs/agents/facades/anthropic.js +46 -0
  10. package/dist/cjs/agents/facades/anthropic.js.map +1 -0
  11. package/dist/cjs/agents/facades/index.d.ts +4 -0
  12. package/dist/cjs/agents/facades/index.d.ts.map +1 -0
  13. package/dist/cjs/agents/facades/index.js +10 -0
  14. package/dist/cjs/agents/facades/index.js.map +1 -0
  15. package/dist/cjs/agents/facades/native.d.ts +29 -0
  16. package/dist/cjs/agents/facades/native.d.ts.map +1 -0
  17. package/dist/cjs/agents/facades/native.js +27 -0
  18. package/dist/cjs/agents/facades/native.js.map +1 -0
  19. package/dist/cjs/agents/facades/openai.d.ts +32 -0
  20. package/dist/cjs/agents/facades/openai.d.ts.map +1 -0
  21. package/dist/cjs/agents/facades/openai.js +55 -0
  22. package/dist/cjs/agents/facades/openai.js.map +1 -0
  23. package/dist/cjs/agents/index.d.ts +23 -0
  24. package/dist/cjs/agents/index.d.ts.map +1 -0
  25. package/dist/cjs/agents/index.js +37 -0
  26. package/dist/cjs/agents/index.js.map +1 -0
  27. package/dist/cjs/agents/normalized.d.ts +59 -0
  28. package/dist/cjs/agents/normalized.d.ts.map +1 -0
  29. package/dist/cjs/agents/normalized.js +35 -0
  30. package/dist/cjs/agents/normalized.js.map +1 -0
  31. package/dist/cjs/agents/schemas/anthropic.d.ts +46 -0
  32. package/dist/cjs/agents/schemas/anthropic.d.ts.map +1 -0
  33. package/dist/cjs/agents/schemas/anthropic.js +55 -0
  34. package/dist/cjs/agents/schemas/anthropic.js.map +1 -0
  35. package/dist/cjs/agents/schemas/index.d.ts +3 -0
  36. package/dist/cjs/agents/schemas/index.d.ts.map +1 -0
  37. package/dist/cjs/agents/schemas/index.js +8 -0
  38. package/dist/cjs/agents/schemas/index.js.map +1 -0
  39. package/dist/cjs/agents/schemas/openai.d.ts +51 -0
  40. package/dist/cjs/agents/schemas/openai.d.ts.map +1 -0
  41. package/dist/cjs/agents/schemas/openai.js +60 -0
  42. package/dist/cjs/agents/schemas/openai.js.map +1 -0
  43. package/dist/cjs/agents/tools/index.d.ts +2 -0
  44. package/dist/cjs/agents/tools/index.d.ts.map +1 -0
  45. package/dist/cjs/agents/tools/index.js +7 -0
  46. package/dist/cjs/agents/tools/index.js.map +1 -0
  47. package/dist/cjs/agents/tools/web-search.d.ts +56 -0
  48. package/dist/cjs/agents/tools/web-search.d.ts.map +1 -0
  49. package/dist/cjs/agents/tools/web-search.js +128 -0
  50. package/dist/cjs/agents/tools/web-search.js.map +1 -0
  51. package/dist/cjs/clients/compression.d.ts +39 -147
  52. package/dist/cjs/clients/compression.d.ts.map +1 -1
  53. package/dist/cjs/clients/compression.js +114 -194
  54. package/dist/cjs/clients/compression.js.map +1 -1
  55. package/dist/cjs/clients/index.d.ts +1 -1
  56. package/dist/cjs/clients/index.d.ts.map +1 -1
  57. package/dist/cjs/clients/index.js.map +1 -1
  58. package/dist/cjs/config/constants.d.ts +3 -28
  59. package/dist/cjs/config/constants.d.ts.map +1 -1
  60. package/dist/cjs/config/constants.js +4 -43
  61. package/dist/cjs/config/constants.js.map +1 -1
  62. package/dist/cjs/config/endpoints.d.ts +3 -15
  63. package/dist/cjs/config/endpoints.d.ts.map +1 -1
  64. package/dist/cjs/config/endpoints.js +3 -20
  65. package/dist/cjs/config/endpoints.js.map +1 -1
  66. package/dist/cjs/config/index.d.ts +1 -1
  67. package/dist/cjs/config/index.d.ts.map +1 -1
  68. package/dist/cjs/config/index.js +1 -7
  69. package/dist/cjs/config/index.js.map +1 -1
  70. package/dist/cjs/errors/exceptions.d.ts.map +1 -1
  71. package/dist/cjs/errors/exceptions.js +0 -6
  72. package/dist/cjs/errors/exceptions.js.map +1 -1
  73. package/dist/cjs/http/client.d.ts +5 -17
  74. package/dist/cjs/http/client.d.ts.map +1 -1
  75. package/dist/cjs/http/client.js +110 -115
  76. package/dist/cjs/http/client.js.map +1 -1
  77. package/dist/cjs/index.d.ts +7 -15
  78. package/dist/cjs/index.d.ts.map +1 -1
  79. package/dist/cjs/index.js +22 -25
  80. package/dist/cjs/index.js.map +1 -1
  81. package/dist/cjs/integrations/_shared/client.d.ts +13 -0
  82. package/dist/cjs/integrations/_shared/client.d.ts.map +1 -0
  83. package/dist/cjs/integrations/_shared/client.js +21 -0
  84. package/dist/cjs/integrations/_shared/client.js.map +1 -0
  85. package/dist/cjs/integrations/_shared/compress.d.ts +28 -0
  86. package/dist/cjs/integrations/_shared/compress.d.ts.map +1 -0
  87. package/dist/cjs/integrations/_shared/compress.js +38 -0
  88. package/dist/cjs/integrations/_shared/compress.js.map +1 -0
  89. package/dist/cjs/integrations/_shared/errors.d.ts +20 -0
  90. package/dist/cjs/integrations/_shared/errors.d.ts.map +1 -0
  91. package/dist/cjs/integrations/_shared/errors.js +49 -0
  92. package/dist/cjs/integrations/_shared/errors.js.map +1 -0
  93. package/dist/cjs/integrations/_shared/filters.d.ts +20 -0
  94. package/dist/cjs/integrations/_shared/filters.d.ts.map +1 -0
  95. package/dist/cjs/integrations/_shared/filters.js +33 -0
  96. package/dist/cjs/integrations/_shared/filters.js.map +1 -0
  97. package/dist/cjs/integrations/_shared/index.d.ts +7 -0
  98. package/dist/cjs/integrations/_shared/index.d.ts.map +1 -0
  99. package/dist/cjs/integrations/_shared/index.js +26 -0
  100. package/dist/cjs/integrations/_shared/index.js.map +1 -0
  101. package/dist/cjs/integrations/_shared/query.d.ts +48 -0
  102. package/dist/cjs/integrations/_shared/query.d.ts.map +1 -0
  103. package/dist/cjs/integrations/_shared/query.js +141 -0
  104. package/dist/cjs/integrations/_shared/query.js.map +1 -0
  105. package/dist/cjs/integrations/_shared/tokens.d.ts +20 -0
  106. package/dist/cjs/integrations/_shared/tokens.d.ts.map +1 -0
  107. package/dist/cjs/integrations/_shared/tokens.js +26 -0
  108. package/dist/cjs/integrations/_shared/tokens.js.map +1 -0
  109. package/dist/cjs/integrations/langchain/index.d.ts +10 -0
  110. package/dist/cjs/integrations/langchain/index.d.ts.map +1 -0
  111. package/dist/cjs/integrations/langchain/index.js +18 -0
  112. package/dist/cjs/integrations/langchain/index.js.map +1 -0
  113. package/dist/cjs/integrations/langchain/middleware.d.ts +94 -0
  114. package/dist/cjs/integrations/langchain/middleware.d.ts.map +1 -0
  115. package/dist/cjs/integrations/langchain/middleware.js +273 -0
  116. package/dist/cjs/integrations/langchain/middleware.js.map +1 -0
  117. package/dist/cjs/integrations/langchain/retriever.d.ts +54 -0
  118. package/dist/cjs/integrations/langchain/retriever.d.ts.map +1 -0
  119. package/dist/cjs/integrations/langchain/retriever.js +118 -0
  120. package/dist/cjs/integrations/langchain/retriever.js.map +1 -0
  121. package/dist/cjs/integrations/langchain/wrappers.d.ts +39 -0
  122. package/dist/cjs/integrations/langchain/wrappers.d.ts.map +1 -0
  123. package/dist/cjs/integrations/langchain/wrappers.js +88 -0
  124. package/dist/cjs/integrations/langchain/wrappers.js.map +1 -0
  125. package/dist/cjs/integrations/langgraph/checkpoint.d.ts +49 -0
  126. package/dist/cjs/integrations/langgraph/checkpoint.d.ts.map +1 -0
  127. package/dist/cjs/integrations/langgraph/checkpoint.js +79 -0
  128. package/dist/cjs/integrations/langgraph/checkpoint.js.map +1 -0
  129. package/dist/cjs/integrations/langgraph/handoff.d.ts +44 -0
  130. package/dist/cjs/integrations/langgraph/handoff.d.ts.map +1 -0
  131. package/dist/cjs/integrations/langgraph/handoff.js +86 -0
  132. package/dist/cjs/integrations/langgraph/handoff.js.map +1 -0
  133. package/dist/cjs/integrations/langgraph/index.d.ts +18 -0
  134. package/dist/cjs/integrations/langgraph/index.d.ts.map +1 -0
  135. package/dist/cjs/integrations/langgraph/index.js +28 -0
  136. package/dist/cjs/integrations/langgraph/index.js.map +1 -0
  137. package/dist/cjs/integrations/langgraph/nodes.d.ts +34 -0
  138. package/dist/cjs/integrations/langgraph/nodes.d.ts.map +1 -0
  139. package/dist/cjs/integrations/langgraph/nodes.js +54 -0
  140. package/dist/cjs/integrations/langgraph/nodes.js.map +1 -0
  141. package/dist/cjs/integrations/langgraph/store.d.ts +76 -0
  142. package/dist/cjs/integrations/langgraph/store.d.ts.map +1 -0
  143. package/dist/cjs/integrations/langgraph/store.js +121 -0
  144. package/dist/cjs/integrations/langgraph/store.js.map +1 -0
  145. package/dist/cjs/integrations/llamaindex/index.d.ts +10 -0
  146. package/dist/cjs/integrations/llamaindex/index.d.ts.map +1 -0
  147. package/dist/cjs/integrations/llamaindex/index.js +15 -0
  148. package/dist/cjs/integrations/llamaindex/index.js.map +1 -0
  149. package/dist/cjs/integrations/llamaindex/memory.d.ts +74 -0
  150. package/dist/cjs/integrations/llamaindex/memory.d.ts.map +1 -0
  151. package/dist/cjs/integrations/llamaindex/memory.js +95 -0
  152. package/dist/cjs/integrations/llamaindex/memory.js.map +1 -0
  153. package/dist/cjs/integrations/llamaindex/postprocessor.d.ts +66 -0
  154. package/dist/cjs/integrations/llamaindex/postprocessor.d.ts.map +1 -0
  155. package/dist/cjs/integrations/llamaindex/postprocessor.js +172 -0
  156. package/dist/cjs/integrations/llamaindex/postprocessor.js.map +1 -0
  157. package/dist/cjs/integrations/llamaindex/wrappers.d.ts +38 -0
  158. package/dist/cjs/integrations/llamaindex/wrappers.d.ts.map +1 -0
  159. package/dist/cjs/integrations/llamaindex/wrappers.js +46 -0
  160. package/dist/cjs/integrations/llamaindex/wrappers.js.map +1 -0
  161. package/dist/cjs/logger.d.ts +18 -0
  162. package/dist/cjs/logger.d.ts.map +1 -0
  163. package/dist/cjs/logger.js +41 -0
  164. package/dist/cjs/logger.js.map +1 -0
  165. package/dist/cjs/schemas/compression.d.ts +33 -103
  166. package/dist/cjs/schemas/compression.d.ts.map +1 -1
  167. package/dist/cjs/schemas/compression.js +6 -59
  168. package/dist/cjs/schemas/compression.js.map +1 -1
  169. package/dist/cjs/schemas/index.d.ts +1 -4
  170. package/dist/cjs/schemas/index.d.ts.map +1 -1
  171. package/dist/cjs/schemas/index.js +1 -8
  172. package/dist/cjs/schemas/index.js.map +1 -1
  173. package/dist/cjs/version.d.ts +1 -1
  174. package/dist/cjs/version.js +1 -1
  175. package/dist/esm/agents/engine.d.ts +121 -0
  176. package/dist/esm/agents/engine.d.ts.map +1 -0
  177. package/dist/esm/agents/engine.js +478 -0
  178. package/dist/esm/agents/engine.js.map +1 -0
  179. package/dist/esm/agents/facades/anthropic.d.ts +26 -0
  180. package/dist/esm/agents/facades/anthropic.d.ts.map +1 -0
  181. package/dist/esm/agents/facades/anthropic.js +43 -0
  182. package/dist/esm/agents/facades/anthropic.js.map +1 -0
  183. package/dist/esm/agents/facades/index.d.ts +4 -0
  184. package/dist/esm/agents/facades/index.d.ts.map +1 -0
  185. package/dist/esm/agents/facades/index.js +4 -0
  186. package/dist/esm/agents/facades/index.js.map +1 -0
  187. package/dist/esm/agents/facades/native.d.ts +29 -0
  188. package/dist/esm/agents/facades/native.d.ts.map +1 -0
  189. package/dist/esm/agents/facades/native.js +24 -0
  190. package/dist/esm/agents/facades/native.js.map +1 -0
  191. package/dist/esm/agents/facades/openai.d.ts +32 -0
  192. package/dist/esm/agents/facades/openai.d.ts.map +1 -0
  193. package/dist/esm/agents/facades/openai.js +52 -0
  194. package/dist/esm/agents/facades/openai.js.map +1 -0
  195. package/dist/esm/agents/index.d.ts +23 -0
  196. package/dist/esm/agents/index.d.ts.map +1 -0
  197. package/dist/esm/agents/index.js +23 -0
  198. package/dist/esm/agents/index.js.map +1 -0
  199. package/dist/esm/agents/normalized.d.ts +59 -0
  200. package/dist/esm/agents/normalized.d.ts.map +1 -0
  201. package/dist/esm/agents/normalized.js +31 -0
  202. package/dist/esm/agents/normalized.js.map +1 -0
  203. package/dist/esm/agents/schemas/anthropic.d.ts +46 -0
  204. package/dist/esm/agents/schemas/anthropic.d.ts.map +1 -0
  205. package/dist/esm/agents/schemas/anthropic.js +52 -0
  206. package/dist/esm/agents/schemas/anthropic.js.map +1 -0
  207. package/dist/esm/agents/schemas/index.d.ts +3 -0
  208. package/dist/esm/agents/schemas/index.d.ts.map +1 -0
  209. package/dist/esm/agents/schemas/index.js +3 -0
  210. package/dist/esm/agents/schemas/index.js.map +1 -0
  211. package/dist/esm/agents/schemas/openai.d.ts +51 -0
  212. package/dist/esm/agents/schemas/openai.d.ts.map +1 -0
  213. package/dist/esm/agents/schemas/openai.js +57 -0
  214. package/dist/esm/agents/schemas/openai.js.map +1 -0
  215. package/dist/esm/agents/tools/index.d.ts +2 -0
  216. package/dist/esm/agents/tools/index.d.ts.map +1 -0
  217. package/dist/esm/agents/tools/index.js +2 -0
  218. package/dist/esm/agents/tools/index.js.map +1 -0
  219. package/dist/esm/agents/tools/web-search.d.ts +56 -0
  220. package/dist/esm/agents/tools/web-search.d.ts.map +1 -0
  221. package/dist/esm/agents/tools/web-search.js +91 -0
  222. package/dist/esm/agents/tools/web-search.js.map +1 -0
  223. package/dist/esm/clients/compression.d.ts +39 -147
  224. package/dist/esm/clients/compression.d.ts.map +1 -1
  225. package/dist/esm/clients/compression.js +117 -197
  226. package/dist/esm/clients/compression.js.map +1 -1
  227. package/dist/esm/clients/index.d.ts +1 -1
  228. package/dist/esm/clients/index.d.ts.map +1 -1
  229. package/dist/esm/clients/index.js.map +1 -1
  230. package/dist/esm/config/constants.d.ts +3 -28
  231. package/dist/esm/config/constants.d.ts.map +1 -1
  232. package/dist/esm/config/constants.js +3 -42
  233. package/dist/esm/config/constants.js.map +1 -1
  234. package/dist/esm/config/endpoints.d.ts +3 -15
  235. package/dist/esm/config/endpoints.d.ts.map +1 -1
  236. package/dist/esm/config/endpoints.js +3 -20
  237. package/dist/esm/config/endpoints.js.map +1 -1
  238. package/dist/esm/config/index.d.ts +1 -1
  239. package/dist/esm/config/index.d.ts.map +1 -1
  240. package/dist/esm/config/index.js +1 -1
  241. package/dist/esm/config/index.js.map +1 -1
  242. package/dist/esm/errors/exceptions.d.ts.map +1 -1
  243. package/dist/esm/errors/exceptions.js +0 -6
  244. package/dist/esm/errors/exceptions.js.map +1 -1
  245. package/dist/esm/http/client.d.ts +5 -17
  246. package/dist/esm/http/client.d.ts.map +1 -1
  247. package/dist/esm/http/client.js +110 -115
  248. package/dist/esm/http/client.js.map +1 -1
  249. package/dist/esm/index.d.ts +7 -15
  250. package/dist/esm/index.d.ts.map +1 -1
  251. package/dist/esm/index.js +7 -13
  252. package/dist/esm/index.js.map +1 -1
  253. package/dist/esm/integrations/_shared/client.d.ts +13 -0
  254. package/dist/esm/integrations/_shared/client.d.ts.map +1 -0
  255. package/dist/esm/integrations/_shared/client.js +17 -0
  256. package/dist/esm/integrations/_shared/client.js.map +1 -0
  257. package/dist/esm/integrations/_shared/compress.d.ts +28 -0
  258. package/dist/esm/integrations/_shared/compress.d.ts.map +1 -0
  259. package/dist/esm/integrations/_shared/compress.js +35 -0
  260. package/dist/esm/integrations/_shared/compress.js.map +1 -0
  261. package/dist/esm/integrations/_shared/errors.d.ts +20 -0
  262. package/dist/esm/integrations/_shared/errors.d.ts.map +1 -0
  263. package/dist/esm/integrations/_shared/errors.js +44 -0
  264. package/dist/esm/integrations/_shared/errors.js.map +1 -0
  265. package/dist/esm/integrations/_shared/filters.d.ts +20 -0
  266. package/dist/esm/integrations/_shared/filters.d.ts.map +1 -0
  267. package/dist/esm/integrations/_shared/filters.js +30 -0
  268. package/dist/esm/integrations/_shared/filters.js.map +1 -0
  269. package/dist/esm/integrations/_shared/index.d.ts +7 -0
  270. package/dist/esm/integrations/_shared/index.d.ts.map +1 -0
  271. package/dist/esm/integrations/_shared/index.js +7 -0
  272. package/dist/esm/integrations/_shared/index.js.map +1 -0
  273. package/dist/esm/integrations/_shared/query.d.ts +48 -0
  274. package/dist/esm/integrations/_shared/query.d.ts.map +1 -0
  275. package/dist/esm/integrations/_shared/query.js +135 -0
  276. package/dist/esm/integrations/_shared/query.js.map +1 -0
  277. package/dist/esm/integrations/_shared/tokens.d.ts +20 -0
  278. package/dist/esm/integrations/_shared/tokens.d.ts.map +1 -0
  279. package/dist/esm/integrations/_shared/tokens.js +23 -0
  280. package/dist/esm/integrations/_shared/tokens.js.map +1 -0
  281. package/dist/esm/integrations/langchain/index.d.ts +10 -0
  282. package/dist/esm/integrations/langchain/index.d.ts.map +1 -0
  283. package/dist/esm/integrations/langchain/index.js +9 -0
  284. package/dist/esm/integrations/langchain/index.js.map +1 -0
  285. package/dist/esm/integrations/langchain/middleware.d.ts +94 -0
  286. package/dist/esm/integrations/langchain/middleware.d.ts.map +1 -0
  287. package/dist/esm/integrations/langchain/middleware.js +268 -0
  288. package/dist/esm/integrations/langchain/middleware.js.map +1 -0
  289. package/dist/esm/integrations/langchain/retriever.d.ts +54 -0
  290. package/dist/esm/integrations/langchain/retriever.d.ts.map +1 -0
  291. package/dist/esm/integrations/langchain/retriever.js +114 -0
  292. package/dist/esm/integrations/langchain/retriever.js.map +1 -0
  293. package/dist/esm/integrations/langchain/wrappers.d.ts +39 -0
  294. package/dist/esm/integrations/langchain/wrappers.d.ts.map +1 -0
  295. package/dist/esm/integrations/langchain/wrappers.js +84 -0
  296. package/dist/esm/integrations/langchain/wrappers.js.map +1 -0
  297. package/dist/esm/integrations/langgraph/checkpoint.d.ts +49 -0
  298. package/dist/esm/integrations/langgraph/checkpoint.d.ts.map +1 -0
  299. package/dist/esm/integrations/langgraph/checkpoint.js +75 -0
  300. package/dist/esm/integrations/langgraph/checkpoint.js.map +1 -0
  301. package/dist/esm/integrations/langgraph/handoff.d.ts +44 -0
  302. package/dist/esm/integrations/langgraph/handoff.d.ts.map +1 -0
  303. package/dist/esm/integrations/langgraph/handoff.js +83 -0
  304. package/dist/esm/integrations/langgraph/handoff.js.map +1 -0
  305. package/dist/esm/integrations/langgraph/index.d.ts +18 -0
  306. package/dist/esm/integrations/langgraph/index.d.ts.map +1 -0
  307. package/dist/esm/integrations/langgraph/index.js +17 -0
  308. package/dist/esm/integrations/langgraph/index.js.map +1 -0
  309. package/dist/esm/integrations/langgraph/nodes.d.ts +34 -0
  310. package/dist/esm/integrations/langgraph/nodes.d.ts.map +1 -0
  311. package/dist/esm/integrations/langgraph/nodes.js +51 -0
  312. package/dist/esm/integrations/langgraph/nodes.js.map +1 -0
  313. package/dist/esm/integrations/langgraph/store.d.ts +76 -0
  314. package/dist/esm/integrations/langgraph/store.d.ts.map +1 -0
  315. package/dist/esm/integrations/langgraph/store.js +117 -0
  316. package/dist/esm/integrations/langgraph/store.js.map +1 -0
  317. package/dist/esm/integrations/llamaindex/index.d.ts +10 -0
  318. package/dist/esm/integrations/llamaindex/index.d.ts.map +1 -0
  319. package/dist/esm/integrations/llamaindex/index.js +9 -0
  320. package/dist/esm/integrations/llamaindex/index.js.map +1 -0
  321. package/dist/esm/integrations/llamaindex/memory.d.ts +74 -0
  322. package/dist/esm/integrations/llamaindex/memory.d.ts.map +1 -0
  323. package/dist/esm/integrations/llamaindex/memory.js +91 -0
  324. package/dist/esm/integrations/llamaindex/memory.js.map +1 -0
  325. package/dist/esm/integrations/llamaindex/postprocessor.d.ts +66 -0
  326. package/dist/esm/integrations/llamaindex/postprocessor.d.ts.map +1 -0
  327. package/dist/esm/integrations/llamaindex/postprocessor.js +168 -0
  328. package/dist/esm/integrations/llamaindex/postprocessor.js.map +1 -0
  329. package/dist/esm/integrations/llamaindex/wrappers.d.ts +38 -0
  330. package/dist/esm/integrations/llamaindex/wrappers.d.ts.map +1 -0
  331. package/dist/esm/integrations/llamaindex/wrappers.js +43 -0
  332. package/dist/esm/integrations/llamaindex/wrappers.js.map +1 -0
  333. package/dist/esm/logger.d.ts +18 -0
  334. package/dist/esm/logger.d.ts.map +1 -0
  335. package/dist/esm/logger.js +37 -0
  336. package/dist/esm/logger.js.map +1 -0
  337. package/dist/esm/schemas/compression.d.ts +33 -103
  338. package/dist/esm/schemas/compression.d.ts.map +1 -1
  339. package/dist/esm/schemas/compression.js +5 -58
  340. package/dist/esm/schemas/compression.js.map +1 -1
  341. package/dist/esm/schemas/index.d.ts +1 -4
  342. package/dist/esm/schemas/index.d.ts.map +1 -1
  343. package/dist/esm/schemas/index.js +1 -6
  344. package/dist/esm/schemas/index.js.map +1 -1
  345. package/dist/esm/version.d.ts +1 -1
  346. package/dist/esm/version.js +1 -1
  347. package/package.json +91 -6
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Agent middleware for LangChain.js 1.0+ `createAgent`.
3
+ *
4
+ * - `compresrToolMiddleware` — compresses each tool output as it returns,
5
+ * before it enters agent state.
6
+ * - `compresrSummarizationMiddleware` — when state grows past a token
7
+ * threshold, compresses the older block into a single summary message
8
+ * and replaces it in state. Mirrors LangChain's `SummarizationMiddleware`
9
+ * but uses Compresr instead of an LLM call. KV-cache-friendly:
10
+ * the summary is generated once at trigger time and persists in state.
11
+ *
12
+ * Unified Compresr query API across both:
13
+ *
14
+ * query: string // static query
15
+ * queryExtractor: (...) => string // custom extractor
16
+ * queryArg: string // name of the tool arg
17
+ */
18
+ import { HumanMessage, RemoveMessage, ToolMessage, } from '@langchain/core/messages';
19
+ import { buildClient, compressSafe, DEFAULT_MIN_TOKENS, DEFAULT_MODEL, DEFAULT_POLICY, DEFAULT_RATIO, estimateTokens, makeFilter, resolveQuery, } from '../_shared/index.js';
20
+ const REMOVE_ALL_MESSAGES = '__remove_all__';
21
+ function isToolMessage(value) {
22
+ return value instanceof ToolMessage;
23
+ }
24
+ function buildToolMessage(content, original) {
25
+ const orig = original;
26
+ return new ToolMessage({
27
+ content,
28
+ tool_call_id: orig.tool_call_id ?? '',
29
+ ...(orig.name !== undefined ? { name: orig.name } : {}),
30
+ });
31
+ }
32
+ function isEligible(result, toolCall, eligible) {
33
+ if (!isToolMessage(result))
34
+ return false;
35
+ const content = result.content;
36
+ if (typeof content !== 'string')
37
+ return false;
38
+ const name = toolCall.name ?? result.name;
39
+ return eligible(name);
40
+ }
41
+ export function compresrToolMiddleware(options) {
42
+ const { apiKey, client, baseUrl, compressionModel = DEFAULT_MODEL, targetCompressionRatio = DEFAULT_RATIO, minTokens = DEFAULT_MIN_TOKENS, coarse, allowTools, ignoreTools, onError = DEFAULT_POLICY, query, queryExtractor, queryArg, } = options;
43
+ const eligible = makeFilter({ allow: allowTools, ignore: ignoreTools });
44
+ const compresr = client ?? buildClient({ apiKey, baseUrl, caller: 'compresrToolMiddleware' });
45
+ function resolveTheQuery(toolCall, messages) {
46
+ return resolveQuery({
47
+ staticQuery: query,
48
+ extractor: queryExtractor
49
+ ? (arg) => queryExtractor(...arg)
50
+ : undefined,
51
+ extractorArg: queryExtractor ? [toolCall, messages] : undefined,
52
+ args: toolCall.args ?? null,
53
+ argsKey: queryArg,
54
+ messages,
55
+ toolCallId: toolCall.id,
56
+ });
57
+ }
58
+ return {
59
+ name: 'compresr-tool',
60
+ async wrapToolCall(request, handler) {
61
+ const result = await handler(request);
62
+ const toolCall = request.toolCall ?? {};
63
+ if (!isEligible(result, toolCall, eligible)) {
64
+ return result;
65
+ }
66
+ const messages = request.messages ?? [];
67
+ const resolvedQuery = resolveTheQuery(toolCall, messages);
68
+ const compressed = await compressSafe(compresr, {
69
+ context: result.content,
70
+ ...(resolvedQuery !== undefined ? { query: resolvedQuery } : {}),
71
+ compressionModel,
72
+ targetCompressionRatio,
73
+ ...(coarse !== undefined ? { coarse } : {}),
74
+ minTokens,
75
+ onError,
76
+ contextLabel: `tool:${result.name ?? '?'}`,
77
+ });
78
+ return compressed !== result.content
79
+ ? buildToolMessage(compressed, result)
80
+ : result;
81
+ },
82
+ };
83
+ }
84
+ const SUMMARY_PREFIX = '[Earlier conversation summary]\n\n';
85
+ function msgToText(m) {
86
+ const ctor = m.constructor?.name ?? 'Msg';
87
+ const role = ctor.replace('Message', '').toLowerCase() || 'msg';
88
+ const name = m.name;
89
+ const label = name ? `${role}:${name}` : role;
90
+ const c = m.content;
91
+ const text = typeof c === 'string' ? c : JSON.stringify(c);
92
+ return `${label}: ${text}`;
93
+ }
94
+ function isSummaryMessage(m) {
95
+ if (!(m instanceof HumanMessage))
96
+ return false;
97
+ const c = m.content;
98
+ return typeof c === 'string' && c.startsWith(SUMMARY_PREFIX);
99
+ }
100
+ export function compresrSummarizationMiddleware(options) {
101
+ const { apiKey, client, baseUrl, compressionModel = DEFAULT_MODEL, targetCompressionRatio = DEFAULT_RATIO, coarse, onError = DEFAULT_POLICY, maxTokensBeforeSummary = 4_000, messagesToKeep = 20, trigger, keep: keepAlias, tokenCounter, query, queryExtractor, } = options;
102
+ const compresr = client ?? buildClient({ apiKey, baseUrl, caller: 'compresrSummarizationMiddleware' });
103
+ const maxTokens = Math.max(1, trigger ?? maxTokensBeforeSummary);
104
+ const keep = Math.max(1, keepAlias ?? messagesToKeep);
105
+ const countTokens = tokenCounter ?? estimateTokens;
106
+ function resolveTheQuery(messages) {
107
+ return resolveQuery({
108
+ staticQuery: query,
109
+ extractor: queryExtractor
110
+ ? (arg) => queryExtractor(arg)
111
+ : undefined,
112
+ extractorArg: queryExtractor ? messages : undefined,
113
+ messages,
114
+ });
115
+ }
116
+ return {
117
+ name: 'compresr-summarization',
118
+ async beforeModel(state) {
119
+ const messages = [...(state.messages ?? [])];
120
+ if (messages.length <= keep)
121
+ return undefined;
122
+ let total = 0;
123
+ for (const m of messages) {
124
+ const c = m.content;
125
+ if (typeof c === 'string')
126
+ total += countTokens(c);
127
+ }
128
+ if (total < maxTokens)
129
+ return undefined;
130
+ const toSummarize = messages.slice(0, messages.length - keep);
131
+ const recent = messages.slice(messages.length - keep);
132
+ if (toSummarize.length === 0)
133
+ return undefined;
134
+ let joined;
135
+ if (toSummarize.length > 0 && isSummaryMessage(toSummarize[0])) {
136
+ const prev = toSummarize[0].content.slice(SUMMARY_PREFIX.length);
137
+ const extra = toSummarize.slice(1).map(msgToText).join('\n');
138
+ joined = prev + '\n\n' + extra;
139
+ }
140
+ else {
141
+ joined = toSummarize.map(msgToText).join('\n');
142
+ }
143
+ const compressed = await compressSafe(compresr, {
144
+ context: joined,
145
+ ...(resolveTheQuery(messages) !== undefined
146
+ ? { query: resolveTheQuery(messages) }
147
+ : {}),
148
+ compressionModel,
149
+ targetCompressionRatio,
150
+ ...(coarse !== undefined ? { coarse } : {}),
151
+ minTokens: 1,
152
+ onError,
153
+ contextLabel: 'summary',
154
+ });
155
+ if (compressed === joined)
156
+ return undefined;
157
+ return {
158
+ messages: [
159
+ new RemoveMessage({ id: REMOVE_ALL_MESSAGES }),
160
+ new HumanMessage({ content: `${SUMMARY_PREFIX}${compressed}` }),
161
+ ...recent,
162
+ ],
163
+ };
164
+ },
165
+ };
166
+ }
167
+ function rebuildWithContent(msg, content) {
168
+ if (msg === null || typeof msg !== 'object')
169
+ return msg;
170
+ const ctor = msg.constructor;
171
+ if (typeof ctor !== 'function')
172
+ return msg;
173
+ const init = { content };
174
+ for (const attr of ['tool_call_id', 'name', 'tool_calls', 'id']) {
175
+ const v = msg[attr];
176
+ if (v !== undefined && v !== null)
177
+ init[attr] = v;
178
+ }
179
+ try {
180
+ return new ctor(init);
181
+ }
182
+ catch {
183
+ // Some message classes need positional or different shape — fall back.
184
+ return msg;
185
+ }
186
+ }
187
+ export function compresrPromptMiddleware(options) {
188
+ const { apiKey, client, baseUrl, compressionModel = DEFAULT_MODEL, coarse, onError = DEFAULT_POLICY, maxTokens, minTokens = DEFAULT_MIN_TOKENS, tokenCounter, query, queryExtractor, } = options;
189
+ const compresr = client ?? buildClient({ apiKey, baseUrl, caller: 'compresrPromptMiddleware' });
190
+ const budget = Math.max(1, maxTokens);
191
+ const floor = Math.max(1, minTokens);
192
+ const countTokens = tokenCounter ?? estimateTokens;
193
+ function totalTokens(messages) {
194
+ let t = 0;
195
+ for (const m of messages) {
196
+ const c = m.content;
197
+ if (typeof c === 'string')
198
+ t += countTokens(c);
199
+ }
200
+ return t;
201
+ }
202
+ function resolveTheQuery(messages) {
203
+ return resolveQuery({
204
+ staticQuery: query,
205
+ extractor: queryExtractor ? (arg) => queryExtractor(arg) : undefined,
206
+ extractorArg: queryExtractor ? messages : undefined,
207
+ messages,
208
+ });
209
+ }
210
+ async function shrink(messages) {
211
+ if (totalTokens(messages) <= budget)
212
+ return messages;
213
+ const candidates = [];
214
+ for (let i = 0; i < messages.length; i++) {
215
+ const m = messages[i];
216
+ const c = m.content;
217
+ if (typeof c === 'string') {
218
+ const t = countTokens(c);
219
+ if (t >= floor)
220
+ candidates.push({ idx: i, msg: m, tokens: t });
221
+ }
222
+ }
223
+ candidates.sort((a, b) => b.tokens - a.tokens);
224
+ const resolvedQuery = resolveTheQuery(messages);
225
+ const next = [...messages];
226
+ for (const { idx, msg, tokens: current } of candidates) {
227
+ const totalNow = totalTokens(next);
228
+ if (totalNow <= budget)
229
+ break;
230
+ const overshoot = totalNow - budget;
231
+ const target = Math.max(floor, current - Math.max(1, overshoot));
232
+ const ratio = Math.max(current / Math.max(1, target), 1.0);
233
+ const original = msg.content;
234
+ const compressed = await compressSafe(compresr, {
235
+ context: original,
236
+ ...(resolvedQuery !== undefined ? { query: resolvedQuery } : {}),
237
+ compressionModel,
238
+ targetCompressionRatio: ratio,
239
+ ...(coarse !== undefined ? { coarse } : {}),
240
+ minTokens: floor,
241
+ onError,
242
+ contextLabel: 'prompt_budget',
243
+ });
244
+ if (compressed !== original) {
245
+ next[idx] = rebuildWithContent(msg, compressed);
246
+ }
247
+ }
248
+ return next;
249
+ }
250
+ return {
251
+ name: 'compresr-prompt',
252
+ async wrapModelCall(request, handler) {
253
+ let next = request;
254
+ try {
255
+ const shrunk = await shrink(request.messages);
256
+ if (shrunk !== request.messages) {
257
+ // Parity with Python PY-AM4 — never mutate the caller's request.
258
+ next = { ...request, messages: shrunk };
259
+ }
260
+ }
261
+ catch {
262
+ // Fail open — send the original prompt rather than block the call.
263
+ }
264
+ return handler(next);
265
+ },
266
+ };
267
+ }
268
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../src/integrations/langchain/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * `BaseDocumentCompressor` implementation for `ContextualCompressionRetriever`.
3
+ *
4
+ * Mirrors Python `CompresrExtractor`. One Compresr batch call
5
+ * replaces N LLM extraction calls.
6
+ */
7
+ import { Document } from '@langchain/core/documents';
8
+ import type { CompressionClient } from '../../clients/compression.js';
9
+ import { type ErrorPolicy } from '../_shared/index.js';
10
+ type DocumentType = Document;
11
+ export interface CompresrExtractorOptions {
12
+ apiKey?: string;
13
+ client?: CompressionClient;
14
+ baseUrl?: string;
15
+ compressionModel?: string;
16
+ targetCompressionRatio?: number;
17
+ minTokens?: number;
18
+ coarse?: boolean;
19
+ onError?: ErrorPolicy;
20
+ /** Drop documents whose compressed content is empty. */
21
+ dropBelowMin?: boolean;
22
+ }
23
+ /**
24
+ * Compress retrieved `Document`s with query-aware compression.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { ContextualCompressionRetriever } from '@langchain/classic/retrievers/contextual_compression';
29
+ * import { CompresrExtractor } from '@compresr/sdk/integrations/langchain';
30
+ *
31
+ * const compressor = new CompresrExtractor({
32
+ * apiKey: process.env.COMPRESR_API_KEY!,
33
+ * });
34
+ * const retriever = new ContextualCompressionRetriever({
35
+ * baseCompressor: compressor,
36
+ * baseRetriever: vectorStore.asRetriever({ k: 8 }),
37
+ * });
38
+ * ```
39
+ */
40
+ export declare class CompresrExtractor {
41
+ private readonly compresr;
42
+ private readonly compressionModel;
43
+ private readonly targetCompressionRatio;
44
+ private readonly minTokens;
45
+ private readonly coarse;
46
+ private readonly onError;
47
+ private readonly dropBelowMin;
48
+ constructor(options: CompresrExtractorOptions);
49
+ private partition;
50
+ private emit;
51
+ compressDocuments(documents: readonly DocumentType[], query: string): Promise<DocumentType[]>;
52
+ }
53
+ export {};
54
+ //# sourceMappingURL=retriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retriever.d.ts","sourceRoot":"","sources":["../../../../src/integrations/langchain/retriever.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,YAAY,GAAG,QAAQ,CAAC;AAE7B,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;gBAE3B,OAAO,EAAE,wBAAwB;IAuB7C,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,IAAI;IAQN,iBAAiB,CACrB,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,EAAE,CAAC;CAgD3B"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * `BaseDocumentCompressor` implementation for `ContextualCompressionRetriever`.
3
+ *
4
+ * Mirrors Python `CompresrExtractor`. One Compresr batch call
5
+ * replaces N LLM extraction calls.
6
+ */
7
+ import { Document } from '@langchain/core/documents';
8
+ import { getLogger } from '../../logger.js';
9
+ import { BATCH_LIMIT, buildClient, DEFAULT_MIN_TOKENS, DEFAULT_MODEL, DEFAULT_POLICY, DEFAULT_RATIO, estimateTokens, } from '../_shared/index.js';
10
+ /**
11
+ * Compress retrieved `Document`s with query-aware compression.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { ContextualCompressionRetriever } from '@langchain/classic/retrievers/contextual_compression';
16
+ * import { CompresrExtractor } from '@compresr/sdk/integrations/langchain';
17
+ *
18
+ * const compressor = new CompresrExtractor({
19
+ * apiKey: process.env.COMPRESR_API_KEY!,
20
+ * });
21
+ * const retriever = new ContextualCompressionRetriever({
22
+ * baseCompressor: compressor,
23
+ * baseRetriever: vectorStore.asRetriever({ k: 8 }),
24
+ * });
25
+ * ```
26
+ */
27
+ export class CompresrExtractor {
28
+ compresr;
29
+ compressionModel;
30
+ targetCompressionRatio;
31
+ minTokens;
32
+ coarse;
33
+ onError;
34
+ dropBelowMin;
35
+ constructor(options) {
36
+ const { apiKey, client, baseUrl, compressionModel = DEFAULT_MODEL, targetCompressionRatio = DEFAULT_RATIO, minTokens = DEFAULT_MIN_TOKENS, coarse, onError = DEFAULT_POLICY, dropBelowMin = false, } = options;
37
+ this.compresr =
38
+ client ?? buildClient({ apiKey, baseUrl, caller: 'CompresrExtractor' });
39
+ this.compressionModel = compressionModel;
40
+ this.targetCompressionRatio = targetCompressionRatio;
41
+ this.minTokens = minTokens;
42
+ this.coarse = coarse;
43
+ this.onError = onError;
44
+ this.dropBelowMin = dropBelowMin;
45
+ }
46
+ partition(documents) {
47
+ const indices = [];
48
+ const eligible = [];
49
+ documents.forEach((doc, i) => {
50
+ const pc = doc.pageContent;
51
+ if (typeof pc === 'string' && estimateTokens(pc) >= this.minTokens) {
52
+ indices.push(i);
53
+ eligible.push(doc);
54
+ }
55
+ });
56
+ return { indices, eligible };
57
+ }
58
+ emit(doc, content) {
59
+ const md = doc.metadata ?? {};
60
+ return new Document({
61
+ pageContent: content,
62
+ metadata: { ...md, compresr: true },
63
+ });
64
+ }
65
+ async compressDocuments(documents, query) {
66
+ if (documents.length === 0)
67
+ return [];
68
+ const { indices, eligible } = this.partition(documents);
69
+ if (eligible.length === 0)
70
+ return [...documents];
71
+ const out = [...documents];
72
+ for (let start = 0; start < eligible.length; start += BATCH_LIMIT) {
73
+ const chunk = eligible.slice(start, start + BATCH_LIMIT);
74
+ let results = [];
75
+ try {
76
+ const resp = await this.compresr.compressBatch({
77
+ contexts: chunk.map((d) => d.pageContent),
78
+ queries: query,
79
+ compressionModelName: this.compressionModel,
80
+ targetCompressionRatio: this.targetCompressionRatio,
81
+ ...(this.coarse !== undefined ? { coarse: this.coarse } : {}),
82
+ });
83
+ results = (resp.data?.results ?? []);
84
+ }
85
+ catch (exc) {
86
+ if (this.onError === 'raise')
87
+ throw exc;
88
+ getLogger().warn(`batch compress failed (${stringifyError(exc)}); passthrough ${chunk.length} docs.`);
89
+ continue;
90
+ }
91
+ results.slice(0, chunk.length).forEach((item, offset) => {
92
+ const globalIdx = indices[start + offset];
93
+ const newText = item?.compressed_context;
94
+ if (typeof newText === 'string' && newText && globalIdx !== undefined) {
95
+ const doc = documents[globalIdx];
96
+ if (doc !== undefined) {
97
+ out[globalIdx] = this.emit(doc, newText);
98
+ }
99
+ }
100
+ });
101
+ }
102
+ if (this.dropBelowMin) {
103
+ return out.filter((d) => {
104
+ const pc = d.pageContent;
105
+ return typeof pc === 'string' && pc.trim().length > 0;
106
+ });
107
+ }
108
+ return out;
109
+ }
110
+ }
111
+ function stringifyError(exc) {
112
+ return exc instanceof Error ? exc.message : String(exc);
113
+ }
114
+ //# sourceMappingURL=retriever.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../../../src/integrations/langchain/retriever.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Tool-output wrappers for LangChain.js.
3
+ *
4
+ * Mirrors Python `wrap_tool_with_compression`. Works without `createAgent`
5
+ * middleware — wrap any tool and call it directly in LCEL chains or
6
+ * LangGraph custom graphs.
7
+ *
8
+ * For `latte_v1` the unified Compresr query API applies (see middleware).
9
+ */
10
+ import { type StructuredTool } from '@langchain/core/tools';
11
+ import type { CompressionClient } from '../../clients/compression.js';
12
+ import { type ErrorPolicy } from '../_shared/index.js';
13
+ type StructuredToolType = StructuredTool;
14
+ export interface WrapToolOptions {
15
+ apiKey?: string;
16
+ client?: CompressionClient;
17
+ baseUrl?: string;
18
+ compressionModel?: string;
19
+ targetCompressionRatio?: number;
20
+ minTokens?: number;
21
+ coarse?: boolean;
22
+ query?: string;
23
+ queryExtractor?: (args: Record<string, unknown>) => string | undefined;
24
+ queryArg?: string;
25
+ onError?: ErrorPolicy;
26
+ }
27
+ /**
28
+ * Wrap a structured tool so its string output is compressed transparently.
29
+ *
30
+ * The wrapped tool preserves the original `name`, `description`, and schema.
31
+ * Accepts any tool that exposes `name` + (`func` | `_call` | `invoke`) — i.e.
32
+ * what the `tool()` factory and `StructuredTool` subclasses produce.
33
+ */
34
+ export declare function wrapToolWithCompression(tool: StructuredToolType, options?: WrapToolOptions): StructuredToolType;
35
+ export type ToolDecorator = (tool: StructuredToolType) => StructuredToolType;
36
+ /** Decorator-style helper — for users who prefer function composition. */
37
+ export declare function compressToolOutput(options?: WrapToolOptions): ToolDecorator;
38
+ export {};
39
+ //# sourceMappingURL=wrappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../../../src/integrations/langchain/wrappers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,kBAAkB,GAAG,cAAc,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAsBD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,kBAAkB,EACxB,OAAO,GAAE,eAAoB,GAC5B,kBAAkB,CA+DpB;AAYD,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,kBAAkB,KAAK,kBAAkB,CAAC;AAE7E,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,eAAoB,GAAG,aAAa,CAE/E"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Tool-output wrappers for LangChain.js.
3
+ *
4
+ * Mirrors Python `wrap_tool_with_compression`. Works without `createAgent`
5
+ * middleware — wrap any tool and call it directly in LCEL chains or
6
+ * LangGraph custom graphs.
7
+ *
8
+ * For `latte_v1` the unified Compresr query API applies (see middleware).
9
+ */
10
+ import { tool as toolFactory } from '@langchain/core/tools';
11
+ import { buildClient, compressSafe, DEFAULT_MIN_TOKENS, DEFAULT_MODEL, DEFAULT_POLICY, DEFAULT_RATIO, resolveQuery, } from '../_shared/index.js';
12
+ function isWrappableTool(t) {
13
+ if (typeof t !== 'object' || t === null)
14
+ return false;
15
+ const x = t;
16
+ return (typeof x.name === 'string' &&
17
+ (typeof x.func === 'function' ||
18
+ typeof x._call === 'function' ||
19
+ typeof x.invoke === 'function'));
20
+ }
21
+ /**
22
+ * Wrap a structured tool so its string output is compressed transparently.
23
+ *
24
+ * The wrapped tool preserves the original `name`, `description`, and schema.
25
+ * Accepts any tool that exposes `name` + (`func` | `_call` | `invoke`) — i.e.
26
+ * what the `tool()` factory and `StructuredTool` subclasses produce.
27
+ */
28
+ export function wrapToolWithCompression(tool, options = {}) {
29
+ if (!isWrappableTool(tool)) {
30
+ throw new TypeError('wrapToolWithCompression supports structured tools (with `name` + ' +
31
+ '`func`/`_call`/`invoke`). Use the `tool()` factory from @langchain/core.');
32
+ }
33
+ const { apiKey, client, baseUrl, compressionModel = DEFAULT_MODEL, targetCompressionRatio = DEFAULT_RATIO, minTokens = DEFAULT_MIN_TOKENS, coarse, query, queryExtractor, queryArg, onError = DEFAULT_POLICY, } = options;
34
+ const compresr = client ?? buildClient({ apiKey, baseUrl, caller: 'wrapToolWithCompression' });
35
+ function resolveTheQuery(args) {
36
+ return resolveQuery({
37
+ staticQuery: query,
38
+ extractor: queryExtractor
39
+ ? (arg) => queryExtractor(arg)
40
+ : undefined,
41
+ extractorArg: queryExtractor ? args : undefined,
42
+ args,
43
+ argsKey: queryArg,
44
+ });
45
+ }
46
+ const t = tool;
47
+ const innerCall = pickCallable(t, tool);
48
+ const wrappedFunc = async (args) => {
49
+ const out = await innerCall(args);
50
+ if (typeof out !== 'string')
51
+ return out;
52
+ const q = resolveTheQuery(args);
53
+ return compressSafe(compresr, {
54
+ context: out,
55
+ ...(q !== undefined ? { query: q } : {}),
56
+ compressionModel,
57
+ targetCompressionRatio,
58
+ ...(coarse !== undefined ? { coarse } : {}),
59
+ minTokens,
60
+ onError,
61
+ contextLabel: `tool:${t.name}`,
62
+ });
63
+ };
64
+ const cfg = { name: t.name };
65
+ if (t.description !== undefined)
66
+ cfg.description = t.description;
67
+ if (t.schema !== undefined)
68
+ cfg.schema = t.schema;
69
+ return toolFactory(wrappedFunc, cfg);
70
+ }
71
+ function pickCallable(meta, tool) {
72
+ if (typeof meta.func === 'function')
73
+ return meta.func.bind(tool);
74
+ if (typeof meta._call === 'function')
75
+ return meta._call.bind(tool);
76
+ if (typeof meta.invoke === 'function')
77
+ return meta.invoke.bind(tool);
78
+ throw new TypeError(`Tool '${meta.name}' has no callable surface.`);
79
+ }
80
+ /** Decorator-style helper — for users who prefer function composition. */
81
+ export function compressToolOutput(options = {}) {
82
+ return (tool) => wrapToolWithCompression(tool, options);
83
+ }
84
+ //# sourceMappingURL=wrappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.js","sourceRoot":"","sources":["../../../../src/integrations/langchain/wrappers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * `CompresrCheckpointSerializer` — compresses long string fields before
3
+ * they hit the checkpoint store.
4
+ *
5
+ * Lossy by design: there is no decompression — compressed strings persist
6
+ * in storage and flow back into state on resume. Use `fields` to restrict
7
+ * compression to known-large keys.
8
+ */
9
+ import type { CompressionClient } from '../../clients/compression.js';
10
+ import { type ErrorPolicy } from '../_shared/index.js';
11
+ export interface CompresrCheckpointSerializerOptions {
12
+ apiKey?: string;
13
+ client?: CompressionClient;
14
+ baseUrl?: string;
15
+ compressionModel?: string;
16
+ /**
17
+ * Query passed to `latte_v1`. If unset, the field name (e.g. `retrieved_text`)
18
+ * is used as the query — a reasonable hint for what the value represents.
19
+ */
20
+ query?: string;
21
+ targetCompressionRatio?: number;
22
+ minTokens?: number;
23
+ coarse?: boolean;
24
+ fields?: ReadonlySet<string>;
25
+ onError?: ErrorPolicy;
26
+ }
27
+ /**
28
+ * Drop-in for LangGraph.js checkpoint serializers. Calls
29
+ * `dumpsTyped(obj) → [tag, bytes]`; recursively rewrites long strings
30
+ * into a `{ __compresr__: true, v: <compressed> }` sentinel before
31
+ * JSON-encoding. `loadsTyped` returns the payload as-is (sentinels and all).
32
+ */
33
+ export declare class CompresrCheckpointSerializer {
34
+ private readonly compresr;
35
+ private readonly compressionModel;
36
+ private readonly query;
37
+ private readonly targetCompressionRatio;
38
+ private readonly minTokens;
39
+ private readonly coarse;
40
+ private readonly fields;
41
+ private readonly onError;
42
+ constructor(options: CompresrCheckpointSerializerOptions);
43
+ dumpsTyped(obj: unknown): Promise<[string, Uint8Array]>;
44
+ loadsTyped([_tag, bytes]: [string, Uint8Array]): unknown;
45
+ private walkCompress;
46
+ private shouldCompress;
47
+ private wrapCompressed;
48
+ }
49
+ //# sourceMappingURL=checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../../src/integrations/langgraph/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAML,KAAK,WAAW,EAEjB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,mCAAmC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,OAAO,EAAE,mCAAmC;IAyBlD,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAM7D,UAAU,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,OAAO;YAI1C,YAAY;IAmB1B,OAAO,CAAC,cAAc;YAOR,cAAc;CAc7B"}