@seanhogg/builderforce-memory 2026.7.14 → 2026.9.28

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 (225) hide show
  1. package/README.md +10 -0
  2. package/dist/bridges/AnthropicBridge.d.ts +9 -1
  3. package/dist/bridges/AnthropicBridge.d.ts.map +1 -1
  4. package/dist/bridges/AnthropicBridge.js +58 -2
  5. package/dist/bridges/AnthropicBridge.js.map +1 -1
  6. package/dist/bridges/CachingBridge.d.ts +9 -1
  7. package/dist/bridges/CachingBridge.d.ts.map +1 -1
  8. package/dist/bridges/CachingBridge.js +24 -1
  9. package/dist/bridges/CachingBridge.js.map +1 -1
  10. package/dist/bridges/OpenAIBridge.d.ts +4 -1
  11. package/dist/bridges/OpenAIBridge.d.ts.map +1 -1
  12. package/dist/bridges/OpenAIBridge.js +40 -2
  13. package/dist/bridges/OpenAIBridge.js.map +1 -1
  14. package/dist/bridges/SemanticCachingBridge.d.ts +8 -1
  15. package/dist/bridges/SemanticCachingBridge.d.ts.map +1 -1
  16. package/dist/bridges/SemanticCachingBridge.js +26 -1
  17. package/dist/bridges/SemanticCachingBridge.js.map +1 -1
  18. package/dist/bridges/TransformerBridge.d.ts +13 -0
  19. package/dist/bridges/TransformerBridge.d.ts.map +1 -1
  20. package/dist/bridges/VertexAIBridge.d.ts +102 -0
  21. package/dist/bridges/VertexAIBridge.d.ts.map +1 -0
  22. package/dist/bridges/VertexAIBridge.js +224 -0
  23. package/dist/bridges/VertexAIBridge.js.map +1 -0
  24. package/dist/bridges/index.d.ts +3 -1
  25. package/dist/bridges/index.d.ts.map +1 -1
  26. package/dist/bridges/index.js +1 -0
  27. package/dist/bridges/index.js.map +1 -1
  28. package/dist/eval/EvalHarness.d.ts +37 -0
  29. package/dist/eval/EvalHarness.d.ts.map +1 -0
  30. package/dist/eval/EvalHarness.js +178 -0
  31. package/dist/eval/EvalHarness.js.map +1 -0
  32. package/dist/eval/graders.d.ts +76 -0
  33. package/dist/eval/graders.d.ts.map +1 -0
  34. package/dist/eval/graders.js +168 -0
  35. package/dist/eval/graders.js.map +1 -0
  36. package/dist/eval/index.d.ts +26 -0
  37. package/dist/eval/index.d.ts.map +1 -0
  38. package/dist/eval/index.js +26 -0
  39. package/dist/eval/index.js.map +1 -0
  40. package/dist/eval/types.d.ts +97 -0
  41. package/dist/eval/types.d.ts.map +1 -0
  42. package/dist/eval/types.js +5 -0
  43. package/dist/eval/types.js.map +1 -0
  44. package/dist/evermind/contract.d.ts +40 -0
  45. package/dist/evermind/contract.d.ts.map +1 -0
  46. package/dist/evermind/contract.js +13 -0
  47. package/dist/evermind/contract.js.map +1 -0
  48. package/dist/evermind/index.d.ts +15 -0
  49. package/dist/evermind/index.d.ts.map +1 -0
  50. package/dist/evermind/index.js +4 -0
  51. package/dist/evermind/index.js.map +1 -0
  52. package/dist/evermind/memoryBlock.d.ts +7 -0
  53. package/dist/evermind/memoryBlock.d.ts.map +1 -0
  54. package/dist/evermind/memoryBlock.js +37 -0
  55. package/dist/evermind/memoryBlock.js.map +1 -0
  56. package/dist/evermind/recall.d.ts +48 -0
  57. package/dist/evermind/recall.d.ts.map +1 -0
  58. package/dist/evermind/recall.js +105 -0
  59. package/dist/evermind/recall.js.map +1 -0
  60. package/dist/index.d.ts +18 -3
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +14 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/ingest/IngestionPipeline.d.ts +95 -0
  65. package/dist/ingest/IngestionPipeline.d.ts.map +1 -0
  66. package/dist/ingest/IngestionPipeline.js +295 -0
  67. package/dist/ingest/IngestionPipeline.js.map +1 -0
  68. package/dist/ingest/index.d.ts +10 -0
  69. package/dist/ingest/index.d.ts.map +1 -0
  70. package/dist/ingest/index.js +8 -0
  71. package/dist/ingest/index.js.map +1 -0
  72. package/dist/ingest/parsers.d.ts +53 -0
  73. package/dist/ingest/parsers.d.ts.map +1 -0
  74. package/dist/ingest/parsers.js +306 -0
  75. package/dist/ingest/parsers.js.map +1 -0
  76. package/dist/ingest/types.d.ts +114 -0
  77. package/dist/ingest/types.d.ts.map +1 -0
  78. package/dist/ingest/types.js +19 -0
  79. package/dist/ingest/types.js.map +1 -0
  80. package/dist/memory/MemoryStore.d.ts +33 -0
  81. package/dist/memory/MemoryStore.d.ts.map +1 -1
  82. package/dist/memory/MemoryStore.js +29 -3
  83. package/dist/memory/MemoryStore.js.map +1 -1
  84. package/dist/memory/index.d.ts +1 -1
  85. package/dist/memory/index.d.ts.map +1 -1
  86. package/dist/orchestration/AgentGraph.d.ts +104 -0
  87. package/dist/orchestration/AgentGraph.d.ts.map +1 -0
  88. package/dist/orchestration/AgentGraph.js +364 -0
  89. package/dist/orchestration/AgentGraph.js.map +1 -0
  90. package/dist/orchestration/checkpoint.d.ts +58 -0
  91. package/dist/orchestration/checkpoint.d.ts.map +1 -0
  92. package/dist/orchestration/checkpoint.js +92 -0
  93. package/dist/orchestration/checkpoint.js.map +1 -0
  94. package/dist/orchestration/index.d.ts +14 -0
  95. package/dist/orchestration/index.d.ts.map +1 -0
  96. package/dist/orchestration/index.js +10 -0
  97. package/dist/orchestration/index.js.map +1 -0
  98. package/dist/orchestration/patterns.d.ts +159 -0
  99. package/dist/orchestration/patterns.d.ts.map +1 -0
  100. package/dist/orchestration/patterns.js +371 -0
  101. package/dist/orchestration/patterns.js.map +1 -0
  102. package/dist/orchestration/types.d.ts +146 -0
  103. package/dist/orchestration/types.d.ts.map +1 -0
  104. package/dist/orchestration/types.js +20 -0
  105. package/dist/orchestration/types.js.map +1 -0
  106. package/dist/rag/EnterpriseRetriever.d.ts +114 -0
  107. package/dist/rag/EnterpriseRetriever.d.ts.map +1 -0
  108. package/dist/rag/EnterpriseRetriever.js +240 -0
  109. package/dist/rag/EnterpriseRetriever.js.map +1 -0
  110. package/dist/rag/index.d.ts +6 -0
  111. package/dist/rag/index.d.ts.map +1 -0
  112. package/dist/rag/index.js +5 -0
  113. package/dist/rag/index.js.map +1 -0
  114. package/dist/retrieval/bm25.d.ts +48 -1
  115. package/dist/retrieval/bm25.d.ts.map +1 -1
  116. package/dist/retrieval/bm25.js +59 -13
  117. package/dist/retrieval/bm25.js.map +1 -1
  118. package/dist/retrieval/index.d.ts +2 -2
  119. package/dist/retrieval/index.d.ts.map +1 -1
  120. package/dist/retrieval/index.js +1 -1
  121. package/dist/retrieval/index.js.map +1 -1
  122. package/dist/runtime/SSMRuntime.d.ts +1 -1
  123. package/dist/runtime/SSMRuntime.d.ts.map +1 -1
  124. package/dist/telemetry/InstrumentedBridge.d.ts +62 -0
  125. package/dist/telemetry/InstrumentedBridge.d.ts.map +1 -0
  126. package/dist/telemetry/InstrumentedBridge.js +120 -0
  127. package/dist/telemetry/InstrumentedBridge.js.map +1 -0
  128. package/dist/telemetry/MetricsRegistry.d.ts +88 -0
  129. package/dist/telemetry/MetricsRegistry.d.ts.map +1 -0
  130. package/dist/telemetry/MetricsRegistry.js +167 -0
  131. package/dist/telemetry/MetricsRegistry.js.map +1 -0
  132. package/dist/telemetry/Tracer.d.ts +137 -0
  133. package/dist/telemetry/Tracer.d.ts.map +1 -0
  134. package/dist/telemetry/Tracer.js +244 -0
  135. package/dist/telemetry/Tracer.js.map +1 -0
  136. package/dist/telemetry/exporters.d.ts +68 -0
  137. package/dist/telemetry/exporters.d.ts.map +1 -0
  138. package/dist/telemetry/exporters.js +145 -0
  139. package/dist/telemetry/exporters.js.map +1 -0
  140. package/dist/telemetry/index.d.ts +19 -0
  141. package/dist/telemetry/index.d.ts.map +1 -0
  142. package/dist/telemetry/index.js +12 -0
  143. package/dist/telemetry/index.js.map +1 -0
  144. package/dist/telemetry/pricing.d.ts +74 -0
  145. package/dist/telemetry/pricing.d.ts.map +1 -0
  146. package/dist/telemetry/pricing.js +98 -0
  147. package/dist/telemetry/pricing.js.map +1 -0
  148. package/dist/telemetry/traceparent.d.ts +50 -0
  149. package/dist/telemetry/traceparent.d.ts.map +1 -0
  150. package/dist/telemetry/traceparent.js +77 -0
  151. package/dist/telemetry/traceparent.js.map +1 -0
  152. package/dist/telemetry/types.d.ts +90 -0
  153. package/dist/telemetry/types.d.ts.map +1 -0
  154. package/dist/telemetry/types.js +17 -0
  155. package/dist/telemetry/types.js.map +1 -0
  156. package/dist/vectorstore/MemoryVectorStore.d.ts +72 -0
  157. package/dist/vectorstore/MemoryVectorStore.d.ts.map +1 -0
  158. package/dist/vectorstore/MemoryVectorStore.js +205 -0
  159. package/dist/vectorstore/MemoryVectorStore.js.map +1 -0
  160. package/dist/vectorstore/RestVectorStore.d.ts +79 -0
  161. package/dist/vectorstore/RestVectorStore.d.ts.map +1 -0
  162. package/dist/vectorstore/RestVectorStore.js +170 -0
  163. package/dist/vectorstore/RestVectorStore.js.map +1 -0
  164. package/dist/vectorstore/dialects.d.ts +101 -0
  165. package/dist/vectorstore/dialects.d.ts.map +1 -0
  166. package/dist/vectorstore/dialects.js +618 -0
  167. package/dist/vectorstore/dialects.js.map +1 -0
  168. package/dist/vectorstore/filter.d.ts +42 -0
  169. package/dist/vectorstore/filter.d.ts.map +1 -0
  170. package/dist/vectorstore/filter.js +132 -0
  171. package/dist/vectorstore/filter.js.map +1 -0
  172. package/dist/vectorstore/index.d.ts +15 -0
  173. package/dist/vectorstore/index.d.ts.map +1 -0
  174. package/dist/vectorstore/index.js +11 -0
  175. package/dist/vectorstore/index.js.map +1 -0
  176. package/dist/vectorstore/types.d.ts +151 -0
  177. package/dist/vectorstore/types.d.ts.map +1 -0
  178. package/dist/vectorstore/types.js +30 -0
  179. package/dist/vectorstore/types.js.map +1 -0
  180. package/package.json +39 -5
  181. package/src/bridges/AnthropicBridge.ts +68 -3
  182. package/src/bridges/CachingBridge.ts +28 -2
  183. package/src/bridges/OpenAIBridge.ts +48 -3
  184. package/src/bridges/SemanticCachingBridge.ts +29 -2
  185. package/src/bridges/TransformerBridge.ts +16 -0
  186. package/src/bridges/VertexAIBridge.ts +297 -0
  187. package/src/bridges/index.ts +3 -1
  188. package/src/eval/EvalHarness.ts +214 -0
  189. package/src/eval/graders.ts +218 -0
  190. package/src/eval/index.ts +26 -0
  191. package/src/eval/types.ts +107 -0
  192. package/src/evermind/contract.ts +39 -0
  193. package/src/evermind/index.ts +18 -0
  194. package/src/evermind/memoryBlock.ts +38 -0
  195. package/src/evermind/recall.ts +122 -0
  196. package/src/index.ts +232 -0
  197. package/src/ingest/IngestionPipeline.ts +378 -0
  198. package/src/ingest/index.ts +46 -0
  199. package/src/ingest/parsers.ts +318 -0
  200. package/src/ingest/types.ts +116 -0
  201. package/src/memory/MemoryStore.ts +55 -3
  202. package/src/memory/index.ts +1 -1
  203. package/src/orchestration/AgentGraph.ts +462 -0
  204. package/src/orchestration/checkpoint.ts +129 -0
  205. package/src/orchestration/index.ts +63 -0
  206. package/src/orchestration/patterns.ts +532 -0
  207. package/src/orchestration/types.ts +128 -0
  208. package/src/rag/EnterpriseRetriever.ts +348 -0
  209. package/src/rag/index.ts +18 -0
  210. package/src/retrieval/bm25.ts +71 -13
  211. package/src/retrieval/index.ts +2 -2
  212. package/src/telemetry/InstrumentedBridge.ts +152 -0
  213. package/src/telemetry/MetricsRegistry.ts +263 -0
  214. package/src/telemetry/Tracer.ts +310 -0
  215. package/src/telemetry/exporters.ts +187 -0
  216. package/src/telemetry/index.ts +56 -0
  217. package/src/telemetry/pricing.ts +129 -0
  218. package/src/telemetry/traceparent.ts +89 -0
  219. package/src/telemetry/types.ts +105 -0
  220. package/src/vectorstore/MemoryVectorStore.ts +250 -0
  221. package/src/vectorstore/RestVectorStore.ts +236 -0
  222. package/src/vectorstore/dialects.ts +702 -0
  223. package/src/vectorstore/filter.ts +148 -0
  224. package/src/vectorstore/index.ts +53 -0
  225. package/src/vectorstore/types.ts +149 -0
@@ -0,0 +1,618 @@
1
+ /**
2
+ * vectorstore/dialects.ts — vendor wire shapes, as registry DATA.
3
+ *
4
+ * A dialect is everything that differs between vector databases: the URL shape,
5
+ * the request bodies, the response parsing, and how much of the filter algebra the
6
+ * vendor's query language can express. Supporting a new database is REGISTERING a
7
+ * dialect, never editing a branch in the store — which is the whole reason the
8
+ * adapter is one class over a registry rather than one class per vendor.
9
+ *
10
+ * `translateFilter` returns a `residual`: the part of the filter the vendor cannot
11
+ * express. The store applies the residual locally AFTER the server has done the
12
+ * part it could push down, and over-fetches to compensate. That is the honest
13
+ * design — the alternative is silently dropping a clause, which on an ACL clause
14
+ * is a cross-tenant leak.
15
+ *
16
+ * ⚠️ The three vendor dialects here are validated by unit tests that assert the
17
+ * emitted request bodies and parse recorded response shapes; they have NOT been
18
+ * run against live services in this repository (no credentials). The `evermind`
19
+ * dialect is the canonical contract this package defines and owns.
20
+ */
21
+ // ── helpers ───────────────────────────────────────────────────────────────────
22
+ const vecToArray = (v) => (v ? Array.from(v) : undefined);
23
+ const arrayToVec = (v) => Array.isArray(v) ? Float32Array.from(v) : undefined;
24
+ const asRecord = (v) => (v && typeof v === 'object' ? v : {});
25
+ const asMetadata = (v) => asRecord(v);
26
+ /**
27
+ * Splits a filter into the leaf clauses a dialect accepts and the rest.
28
+ *
29
+ * Only a top-level AND is split. Pushing half an OR to the server and keeping the
30
+ * other half local would widen the server-side result set to *everything* that
31
+ * matches either branch, so a disjunction (or a NOT) is sent to the local pass
32
+ * whole. That is a recall cost, never a correctness one.
33
+ */
34
+ function partition(filter, accepts) {
35
+ if (filter.op === 'and') {
36
+ const supported = [];
37
+ const residual = [];
38
+ for (const clause of filter.filters) {
39
+ const split = partition(clause, accepts);
40
+ supported.push(...split.supported);
41
+ residual.push(...split.residual);
42
+ }
43
+ return { supported, residual };
44
+ }
45
+ if (filter.op === 'or' || filter.op === 'not') {
46
+ return { supported: [], residual: [filter] };
47
+ }
48
+ return accepts(filter) ? { supported: [filter], residual: [] } : { supported: [], residual: [filter] };
49
+ }
50
+ function joinResidual(residual) {
51
+ if (residual.length === 0)
52
+ return undefined;
53
+ return residual.length === 1 ? residual[0] : { op: 'and', filters: residual };
54
+ }
55
+ // ── evermind: the contract this package defines ───────────────────────────────
56
+ /**
57
+ * The canonical gateway contract. A thin service in front of ANY database can
58
+ * implement it (the BuilderForce.ai gateway does), which keeps a customer's chosen
59
+ * store behind their own network boundary while this package speaks one protocol.
60
+ * The filter algebra crosses the wire unchanged, so nothing is ever residual.
61
+ */
62
+ export const evermindDialect = {
63
+ id: 'evermind',
64
+ storesText: true,
65
+ supportsKeywordSearch: true,
66
+ supportsCount: true,
67
+ supportsDeleteByFilter: true,
68
+ translateFilter: (filter) => ({ pushed: filter }),
69
+ upsert: (ctx, records) => ({
70
+ path: `/collections/${encodeURIComponent(ctx.collection)}/upsert`,
71
+ method: 'POST',
72
+ body: {
73
+ records: records.map((r) => ({
74
+ id: r.id,
75
+ text: r.text,
76
+ vector: vecToArray(r.vector),
77
+ metadata: r.metadata,
78
+ })),
79
+ },
80
+ }),
81
+ parseUpsert: (json, sent) => {
82
+ const body = asRecord(json);
83
+ return {
84
+ upserted: Number(body['upserted'] ?? sent) || 0,
85
+ skipped: Number(body['skipped'] ?? 0) || 0,
86
+ };
87
+ },
88
+ query: (ctx, args) => ({
89
+ path: `/collections/${encodeURIComponent(ctx.collection)}/query`,
90
+ method: 'POST',
91
+ body: {
92
+ vector: vecToArray(args.vector),
93
+ text: args.text,
94
+ topK: args.topK,
95
+ filter: args.filter,
96
+ includeVectors: args.includeVectors,
97
+ },
98
+ }),
99
+ parseMatches: (json) => {
100
+ const matches = asRecord(json)['matches'];
101
+ if (!Array.isArray(matches))
102
+ return [];
103
+ return matches.map((m) => {
104
+ const row = asRecord(m);
105
+ const match = {
106
+ id: String(row['id'] ?? ''),
107
+ text: String(row['text'] ?? ''),
108
+ score: Number(row['score']) || 0,
109
+ metadata: asMetadata(row['metadata']),
110
+ };
111
+ const vector = arrayToVec(row['vector']);
112
+ if (vector)
113
+ match.vector = vector;
114
+ return match;
115
+ });
116
+ },
117
+ keywordSearch: (ctx, args) => ({
118
+ path: `/collections/${encodeURIComponent(ctx.collection)}/keyword`,
119
+ method: 'POST',
120
+ body: { text: args.text, topK: args.topK, filter: args.filter },
121
+ }),
122
+ deleteByIds: (ctx, ids) => ({
123
+ path: `/collections/${encodeURIComponent(ctx.collection)}/delete`,
124
+ method: 'POST',
125
+ body: { ids },
126
+ }),
127
+ deleteByFilter: (ctx, filter) => ({
128
+ path: `/collections/${encodeURIComponent(ctx.collection)}/delete`,
129
+ method: 'POST',
130
+ body: { filter },
131
+ }),
132
+ fetch: (ctx, ids) => ({
133
+ path: `/collections/${encodeURIComponent(ctx.collection)}/fetch`,
134
+ method: 'POST',
135
+ body: { ids },
136
+ }),
137
+ parseRecords: (json) => {
138
+ const records = asRecord(json)['records'];
139
+ if (!Array.isArray(records))
140
+ return [];
141
+ return records.map((r) => {
142
+ const row = asRecord(r);
143
+ const record = {
144
+ id: String(row['id'] ?? ''),
145
+ text: String(row['text'] ?? ''),
146
+ metadata: asMetadata(row['metadata']),
147
+ };
148
+ const vector = arrayToVec(row['vector']);
149
+ if (vector)
150
+ record.vector = vector;
151
+ return record;
152
+ });
153
+ },
154
+ count: (ctx, filter) => ({
155
+ path: `/collections/${encodeURIComponent(ctx.collection)}/count`,
156
+ method: 'POST',
157
+ body: { filter },
158
+ }),
159
+ parseCount: (json) => Number(asRecord(json)['count']) || 0,
160
+ };
161
+ // ── Qdrant ────────────────────────────────────────────────────────────────────
162
+ /** Maps one leaf onto a Qdrant field condition. */
163
+ function qdrantLeaf(leaf) {
164
+ switch (leaf.op) {
165
+ case 'eq':
166
+ return { key: leaf.field, match: { value: leaf.value } };
167
+ case 'in':
168
+ case 'anyOf':
169
+ return { key: leaf.field, match: { any: leaf.values } };
170
+ case 'nin':
171
+ return { key: leaf.field, match: { except: leaf.values } };
172
+ case 'contains':
173
+ return { key: leaf.field, match: { text: leaf.value } };
174
+ case 'exists':
175
+ return { is_empty: { key: leaf.field } };
176
+ case 'gt':
177
+ case 'gte':
178
+ case 'lt':
179
+ case 'lte':
180
+ return typeof leaf.value === 'number'
181
+ ? { key: leaf.field, range: { [leaf.op]: leaf.value } }
182
+ : undefined;
183
+ default:
184
+ return undefined;
185
+ }
186
+ }
187
+ export const qdrantDialect = {
188
+ id: 'qdrant',
189
+ storesText: true,
190
+ // Qdrant has full-text conditions but no BM25 ranking over the whole corpus,
191
+ // so keyword search is declared unsupported rather than faked with a filter.
192
+ supportsKeywordSearch: false,
193
+ supportsCount: true,
194
+ supportsDeleteByFilter: true,
195
+ translateFilter: (filter) => {
196
+ const { supported, residual } = partition(filter, (leaf) => {
197
+ if (leaf.op === 'exists')
198
+ return false; // `is_empty` is the inverse; keep it local
199
+ if (leaf.op === 'ne')
200
+ return false;
201
+ return qdrantLeaf(leaf) !== undefined;
202
+ });
203
+ const must = supported.map(qdrantLeaf).filter(Boolean);
204
+ const out = {};
205
+ if (must.length > 0)
206
+ out.pushed = { must };
207
+ const rest = joinResidual(residual);
208
+ if (rest)
209
+ out.residual = rest;
210
+ return out;
211
+ },
212
+ upsert: (ctx, records) => ({
213
+ path: `/collections/${encodeURIComponent(ctx.collection)}/points`,
214
+ method: 'PUT',
215
+ body: {
216
+ points: records.map((r) => ({
217
+ id: r.id,
218
+ vector: vecToArray(r.vector) ?? [],
219
+ // Qdrant has no first-class text field; the chunk rides in the
220
+ // payload beside its metadata under a reserved key.
221
+ payload: { ...r.metadata, __text: r.text },
222
+ })),
223
+ },
224
+ }),
225
+ parseUpsert: (_json, sent) => ({ upserted: sent, skipped: 0 }),
226
+ query: (ctx, args) => ({
227
+ path: `/collections/${encodeURIComponent(ctx.collection)}/points/search`,
228
+ method: 'POST',
229
+ body: {
230
+ vector: vecToArray(args.vector) ?? [],
231
+ limit: args.topK,
232
+ filter: args.filter,
233
+ with_payload: true,
234
+ with_vector: args.includeVectors,
235
+ },
236
+ }),
237
+ parseMatches: (json) => {
238
+ const result = asRecord(json)['result'];
239
+ if (!Array.isArray(result))
240
+ return [];
241
+ return result.map((r) => {
242
+ const row = asRecord(r);
243
+ const payload = asRecord(row['payload']);
244
+ const { __text, ...metadata } = payload;
245
+ const match = {
246
+ id: String(row['id'] ?? ''),
247
+ text: String(__text ?? ''),
248
+ score: Number(row['score']) || 0,
249
+ metadata: metadata,
250
+ };
251
+ const vector = arrayToVec(row['vector']);
252
+ if (vector)
253
+ match.vector = vector;
254
+ return match;
255
+ });
256
+ },
257
+ deleteByIds: (ctx, ids) => ({
258
+ path: `/collections/${encodeURIComponent(ctx.collection)}/points/delete`,
259
+ method: 'POST',
260
+ body: { points: ids },
261
+ }),
262
+ deleteByFilter: (ctx, filter) => ({
263
+ path: `/collections/${encodeURIComponent(ctx.collection)}/points/delete`,
264
+ method: 'POST',
265
+ body: { filter },
266
+ }),
267
+ fetch: (ctx, ids) => ({
268
+ path: `/collections/${encodeURIComponent(ctx.collection)}/points`,
269
+ method: 'POST',
270
+ body: { ids, with_payload: true, with_vector: true },
271
+ }),
272
+ parseRecords: (json) => {
273
+ const result = asRecord(json)['result'];
274
+ if (!Array.isArray(result))
275
+ return [];
276
+ return result.map((r) => {
277
+ const row = asRecord(r);
278
+ const payload = asRecord(row['payload']);
279
+ const { __text, ...metadata } = payload;
280
+ const record = {
281
+ id: String(row['id'] ?? ''),
282
+ text: String(__text ?? ''),
283
+ metadata: metadata,
284
+ };
285
+ const vector = arrayToVec(row['vector']);
286
+ if (vector)
287
+ record.vector = vector;
288
+ return record;
289
+ });
290
+ },
291
+ count: (ctx, filter) => ({
292
+ path: `/collections/${encodeURIComponent(ctx.collection)}/points/count`,
293
+ method: 'POST',
294
+ body: { filter, exact: true },
295
+ }),
296
+ parseCount: (json) => Number(asRecord(asRecord(json)['result'])['count']) || 0,
297
+ };
298
+ // ── Pinecone ──────────────────────────────────────────────────────────────────
299
+ function pineconeLeaf(leaf) {
300
+ switch (leaf.op) {
301
+ case 'eq': return { [leaf.field]: { $eq: leaf.value } };
302
+ case 'ne': return { [leaf.field]: { $ne: leaf.value } };
303
+ case 'gt': return { [leaf.field]: { $gt: leaf.value } };
304
+ case 'gte': return { [leaf.field]: { $gte: leaf.value } };
305
+ case 'lt': return { [leaf.field]: { $lt: leaf.value } };
306
+ case 'lte': return { [leaf.field]: { $lte: leaf.value } };
307
+ // `$in` matches when a list-valued field intersects, which is exactly the
308
+ // ACL semantics `anyOf` describes.
309
+ case 'in':
310
+ case 'anyOf': return { [leaf.field]: { $in: leaf.values } };
311
+ case 'nin': return { [leaf.field]: { $nin: leaf.values } };
312
+ default: return undefined;
313
+ }
314
+ }
315
+ export const pineconeDialect = {
316
+ id: 'pinecone',
317
+ storesText: true,
318
+ supportsKeywordSearch: false,
319
+ supportsCount: false,
320
+ supportsDeleteByFilter: true,
321
+ translateFilter: (filter) => {
322
+ const { supported, residual } = partition(filter, (leaf) => pineconeLeaf(leaf) !== undefined);
323
+ const clauses = supported.map(pineconeLeaf).filter(Boolean);
324
+ const out = {};
325
+ if (clauses.length === 1)
326
+ out.pushed = clauses[0];
327
+ else if (clauses.length > 1)
328
+ out.pushed = { $and: clauses };
329
+ const rest = joinResidual(residual);
330
+ if (rest)
331
+ out.residual = rest;
332
+ return out;
333
+ },
334
+ upsert: (ctx, records) => ({
335
+ path: '/vectors/upsert',
336
+ method: 'POST',
337
+ body: {
338
+ namespace: ctx.collection,
339
+ vectors: records.map((r) => ({
340
+ id: r.id,
341
+ values: vecToArray(r.vector) ?? [],
342
+ metadata: { ...r.metadata, __text: r.text },
343
+ })),
344
+ },
345
+ }),
346
+ parseUpsert: (json, sent) => ({
347
+ upserted: Number(asRecord(json)['upsertedCount'] ?? sent) || 0,
348
+ skipped: 0,
349
+ }),
350
+ query: (ctx, args) => ({
351
+ path: '/query',
352
+ method: 'POST',
353
+ body: {
354
+ namespace: ctx.collection,
355
+ vector: vecToArray(args.vector) ?? [],
356
+ topK: args.topK,
357
+ filter: args.filter,
358
+ includeMetadata: true,
359
+ includeValues: args.includeVectors,
360
+ },
361
+ }),
362
+ parseMatches: (json) => {
363
+ const matches = asRecord(json)['matches'];
364
+ if (!Array.isArray(matches))
365
+ return [];
366
+ return matches.map((m) => {
367
+ const row = asRecord(m);
368
+ const meta = asRecord(row['metadata']);
369
+ const { __text, ...metadata } = meta;
370
+ const match = {
371
+ id: String(row['id'] ?? ''),
372
+ text: String(__text ?? ''),
373
+ score: Number(row['score']) || 0,
374
+ metadata: metadata,
375
+ };
376
+ const vector = arrayToVec(row['values']);
377
+ if (vector)
378
+ match.vector = vector;
379
+ return match;
380
+ });
381
+ },
382
+ deleteByIds: (ctx, ids) => ({
383
+ path: '/vectors/delete',
384
+ method: 'POST',
385
+ body: { namespace: ctx.collection, ids },
386
+ }),
387
+ deleteByFilter: (ctx, filter) => ({
388
+ path: '/vectors/delete',
389
+ method: 'POST',
390
+ body: { namespace: ctx.collection, filter },
391
+ }),
392
+ fetch: (ctx, ids) => ({
393
+ path: '/vectors/fetch',
394
+ method: 'POST',
395
+ body: { namespace: ctx.collection, ids },
396
+ }),
397
+ parseRecords: (json) => {
398
+ const vectors = asRecord(asRecord(json)['vectors']);
399
+ return Object.entries(vectors).map(([id, raw]) => {
400
+ const row = asRecord(raw);
401
+ const meta = asRecord(row['metadata']);
402
+ const { __text, ...metadata } = meta;
403
+ const record = {
404
+ id,
405
+ text: String(__text ?? ''),
406
+ metadata: metadata,
407
+ };
408
+ const vector = arrayToVec(row['values']);
409
+ if (vector)
410
+ record.vector = vector;
411
+ return record;
412
+ });
413
+ },
414
+ };
415
+ // ── Vertex AI Vector Search (GCP) ─────────────────────────────────────────────
416
+ /**
417
+ * Vertex expresses filters as `restricts` (string namespaces with an allow list)
418
+ * and `numericRestricts` (numeric comparisons), which is a close fit for this
419
+ * algebra: `eq`/`in`/`anyOf` on strings become a restrict namespace, and numeric
420
+ * comparisons become a numeric restrict. Anything else stays residual.
421
+ *
422
+ * Vertex stores vectors and restricts, NOT text — hence `storesText: false`. The
423
+ * store hydrates chunk text through its `textResolver`, which in a real GCP
424
+ * architecture reads from Firestore, BigQuery or GCS beside the index. Pretending
425
+ * otherwise would return matches with empty text and an answer with no evidence.
426
+ */
427
+ export const vertexAiDialect = {
428
+ id: 'vertex-ai',
429
+ storesText: false,
430
+ supportsKeywordSearch: false,
431
+ supportsCount: false,
432
+ supportsDeleteByFilter: false,
433
+ translateFilter: (filter) => {
434
+ const { supported, residual } = partition(filter, (leaf) => {
435
+ if (leaf.op === 'eq')
436
+ return typeof leaf.value === 'string' || typeof leaf.value === 'number';
437
+ if (leaf.op === 'in' || leaf.op === 'anyOf')
438
+ return leaf.values.every((v) => typeof v === 'string');
439
+ if (leaf.op === 'gt' || leaf.op === 'gte' || leaf.op === 'lt' || leaf.op === 'lte') {
440
+ return typeof leaf.value === 'number';
441
+ }
442
+ return false;
443
+ });
444
+ const restricts = [];
445
+ const numericRestricts = [];
446
+ const VERTEX_NUMERIC_OP = {
447
+ gt: 'GREATER', gte: 'GREATER_EQUAL', lt: 'LESS', lte: 'LESS_EQUAL', eq: 'EQUAL',
448
+ };
449
+ for (const leaf of supported) {
450
+ if (leaf.op === 'in' || leaf.op === 'anyOf') {
451
+ restricts.push({ namespace: leaf.field, allowList: leaf.values });
452
+ }
453
+ else if (leaf.op === 'eq' && typeof leaf.value === 'string') {
454
+ restricts.push({ namespace: leaf.field, allowList: [leaf.value] });
455
+ }
456
+ else if ('value' in leaf && typeof leaf.value === 'number') {
457
+ numericRestricts.push({
458
+ namespace: leaf.field,
459
+ op: VERTEX_NUMERIC_OP[leaf.op],
460
+ valueDouble: leaf.value,
461
+ });
462
+ }
463
+ }
464
+ const out = {};
465
+ if (restricts.length || numericRestricts.length)
466
+ out.pushed = { restricts, numericRestricts };
467
+ const rest = joinResidual(residual);
468
+ if (rest)
469
+ out.residual = rest;
470
+ return out;
471
+ },
472
+ upsert: (ctx, records) => ({
473
+ path: `/v1/${ctx.options['index']}:upsertDatapoints`,
474
+ method: 'POST',
475
+ body: {
476
+ datapoints: records.map((r) => ({
477
+ datapointId: r.id,
478
+ featureVector: vecToArray(r.vector) ?? [],
479
+ restricts: stringRestricts(r.metadata),
480
+ numericRestricts: numericRestrictsOf(r.metadata),
481
+ })),
482
+ },
483
+ }),
484
+ parseUpsert: (_json, sent) => ({ upserted: sent, skipped: 0 }),
485
+ query: (ctx, args) => {
486
+ const pushed = asRecord(args.filter);
487
+ return {
488
+ path: `/v1/${ctx.options['indexEndpoint']}:findNeighbors`,
489
+ method: 'POST',
490
+ body: {
491
+ deployedIndexId: ctx.options['deployedIndexId'],
492
+ returnFullDatapoint: args.includeVectors,
493
+ queries: [{
494
+ datapoint: {
495
+ datapointId: 'query',
496
+ featureVector: vecToArray(args.vector) ?? [],
497
+ restricts: pushed['restricts'] ?? [],
498
+ numericRestricts: pushed['numericRestricts'] ?? [],
499
+ },
500
+ neighborCount: args.topK,
501
+ }],
502
+ },
503
+ };
504
+ },
505
+ parseMatches: (json) => {
506
+ const groups = asRecord(json)['nearestNeighbors'];
507
+ if (!Array.isArray(groups))
508
+ return [];
509
+ const neighbors = asRecord(groups[0])['neighbors'];
510
+ if (!Array.isArray(neighbors))
511
+ return [];
512
+ return neighbors.map((n) => {
513
+ const row = asRecord(n);
514
+ const datapoint = asRecord(row['datapoint']);
515
+ const match = {
516
+ id: String(datapoint['datapointId'] ?? ''),
517
+ text: '',
518
+ // Vertex returns a DISTANCE; for the cosine measure similarity is
519
+ // 1 - distance. Reported on the same [0,1] scale as every adapter.
520
+ score: 1 - (Number(row['distance']) || 0),
521
+ metadata: restrictsToMetadata(datapoint),
522
+ };
523
+ const vector = arrayToVec(datapoint['featureVector']);
524
+ if (vector)
525
+ match.vector = vector;
526
+ return match;
527
+ });
528
+ },
529
+ deleteByIds: (ctx, ids) => ({
530
+ path: `/v1/${ctx.options['index']}:removeDatapoints`,
531
+ method: 'POST',
532
+ body: { datapointIds: ids },
533
+ }),
534
+ fetch: (ctx, ids) => ({
535
+ path: `/v1/${ctx.options['indexEndpoint']}:readIndexDatapoints`,
536
+ method: 'POST',
537
+ body: { deployedIndexId: ctx.options['deployedIndexId'], ids },
538
+ }),
539
+ parseRecords: (json) => {
540
+ const datapoints = asRecord(json)['datapoints'];
541
+ if (!Array.isArray(datapoints))
542
+ return [];
543
+ return datapoints.map((d) => {
544
+ const row = asRecord(d);
545
+ const record = {
546
+ id: String(row['datapointId'] ?? ''),
547
+ text: '',
548
+ metadata: restrictsToMetadata(row),
549
+ };
550
+ const vector = arrayToVec(row['featureVector']);
551
+ if (vector)
552
+ record.vector = vector;
553
+ return record;
554
+ });
555
+ },
556
+ };
557
+ function stringRestricts(metadata) {
558
+ const out = [];
559
+ for (const [namespace, value] of Object.entries(metadata)) {
560
+ if (typeof value === 'string')
561
+ out.push({ namespace, allowList: [value] });
562
+ else if (Array.isArray(value))
563
+ out.push({ namespace, allowList: value });
564
+ }
565
+ return out;
566
+ }
567
+ function numericRestrictsOf(metadata) {
568
+ return Object.entries(metadata)
569
+ .filter(([, v]) => typeof v === 'number')
570
+ .map(([namespace, v]) => ({ namespace, valueDouble: v }));
571
+ }
572
+ function restrictsToMetadata(datapoint) {
573
+ const out = {};
574
+ const restricts = datapoint['restricts'];
575
+ if (Array.isArray(restricts)) {
576
+ for (const r of restricts) {
577
+ const row = asRecord(r);
578
+ const list = Array.isArray(row['allowList']) ? row['allowList'] : [];
579
+ const namespace = String(row['namespace'] ?? '');
580
+ if (namespace)
581
+ out[namespace] = list.length === 1 ? list[0] : list;
582
+ }
583
+ }
584
+ const numeric = datapoint['numericRestricts'];
585
+ if (Array.isArray(numeric)) {
586
+ for (const r of numeric) {
587
+ const row = asRecord(r);
588
+ const namespace = String(row['namespace'] ?? '');
589
+ const value = row['valueDouble'] ?? row['valueFloat'] ?? row['valueInt'];
590
+ if (namespace && value !== undefined)
591
+ out[namespace] = Number(value);
592
+ }
593
+ }
594
+ return out;
595
+ }
596
+ // ── registry ──────────────────────────────────────────────────────────────────
597
+ const REGISTRY = new Map([
598
+ [evermindDialect.id, evermindDialect],
599
+ [qdrantDialect.id, qdrantDialect],
600
+ [pineconeDialect.id, pineconeDialect],
601
+ [vertexAiDialect.id, vertexAiDialect],
602
+ ]);
603
+ /** Registers (or replaces) a dialect — how a customer adds their own database. */
604
+ export function registerDialect(dialect) {
605
+ REGISTRY.set(dialect.id, dialect);
606
+ }
607
+ export function getDialect(id) {
608
+ const dialect = REGISTRY.get(id);
609
+ if (!dialect) {
610
+ throw new Error(`Unknown vector dialect "${id}". Registered: ${[...REGISTRY.keys()].join(', ')}. ` +
611
+ 'Add your own with registerDialect().');
612
+ }
613
+ return dialect;
614
+ }
615
+ export function listDialects() {
616
+ return [...REGISTRY.keys()];
617
+ }
618
+ //# sourceMappingURL=dialects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialects.js","sourceRoot":"","sources":["../../src/vectorstore/dialects.ts"],"names":[],"mappings":"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"}