@fastpaca/cria 1.7.1 → 1.7.2
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.
- package/README.md +24 -0
- package/dist/memory/chroma/index.d.ts.map +1 -1
- package/dist/memory/chroma/index.js +28 -19
- package/dist/memory/chroma/index.js.map +1 -1
- package/dist/memory/postgres.d.ts.map +1 -1
- package/dist/memory/postgres.js +16 -6
- package/dist/memory/postgres.js.map +1 -1
- package/dist/memory/qdrant/index.d.ts.map +1 -1
- package/dist/memory/qdrant/index.js +23 -19
- package/dist/memory/qdrant/index.js.map +1 -1
- package/dist/memory/redis.d.ts.map +1 -1
- package/dist/memory/redis.js +21 -9
- package/dist/memory/redis.js.map +1 -1
- package/dist/memory/sqlite-vector.d.ts +89 -0
- package/dist/memory/sqlite-vector.d.ts.map +1 -0
- package/dist/memory/sqlite-vector.js +211 -0
- package/dist/memory/sqlite-vector.js.map +1 -0
- package/dist/memory/sqlite.d.ts +12 -12
- package/dist/memory/sqlite.d.ts.map +1 -1
- package/dist/memory/sqlite.js +57 -36
- package/dist/memory/sqlite.js.map +1 -1
- package/package.json +10 -7
package/README.md
CHANGED
|
@@ -324,6 +324,30 @@ const messages = await cria
|
|
|
324
324
|
|
|
325
325
|
</details>
|
|
326
326
|
|
|
327
|
+
<details>
|
|
328
|
+
<summary><strong>SQLite (vector search)</strong></summary>
|
|
329
|
+
|
|
330
|
+
```ts
|
|
331
|
+
import { z } from "zod";
|
|
332
|
+
import { SqliteVectorStore } from "@fastpaca/cria/memory/sqlite-vector";
|
|
333
|
+
|
|
334
|
+
const store = new SqliteVectorStore({
|
|
335
|
+
filename: "cria.sqlite",
|
|
336
|
+
dimensions: 1536,
|
|
337
|
+
embed: async (text) => await getEmbedding(text),
|
|
338
|
+
schema: z.string(),
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
const messages = await cria
|
|
342
|
+
.prompt(provider)
|
|
343
|
+
.system("You are a research assistant.")
|
|
344
|
+
.vectorSearch({ store, query, limit: 10 })
|
|
345
|
+
.user(query)
|
|
346
|
+
.render({ budget: 128_000 });
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
</details>
|
|
350
|
+
|
|
327
351
|
<details>
|
|
328
352
|
<summary><strong>Chroma (vector search)</strong></summary>
|
|
329
353
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAA8B,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAA8B,MAAM,UAAU,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gDAAgD;IAChD,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAwDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;gBAEhC,OAAO,EAAE,kBAAkB;IAKjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAgBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;CAkDpC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { IncludeEnum } from "chromadb";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function parseDocument(document) {
|
|
7
|
-
if (!document) {
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const DocumentSchema = z
|
|
4
|
+
.preprocess((value) => {
|
|
5
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
8
6
|
throw new Error("ChromaStore: document is missing from entry");
|
|
9
7
|
}
|
|
8
|
+
return value;
|
|
9
|
+
}, z.string())
|
|
10
|
+
.transform((document) => {
|
|
10
11
|
try {
|
|
11
12
|
return JSON.parse(document);
|
|
12
13
|
}
|
|
@@ -14,7 +15,8 @@ function parseDocument(document) {
|
|
|
14
15
|
// Document was stored as a raw string (T is string)
|
|
15
16
|
return document;
|
|
16
17
|
}
|
|
17
|
-
}
|
|
18
|
+
});
|
|
19
|
+
const MetadataSchema = z.record(z.string(), z.unknown()).optional().nullable();
|
|
18
20
|
/**
|
|
19
21
|
* Convert L2 distance to a similarity score (0-1).
|
|
20
22
|
* Lower distance = higher similarity.
|
|
@@ -29,6 +31,20 @@ function extractTimestamp(metadata, field) {
|
|
|
29
31
|
const value = metadata?.[field];
|
|
30
32
|
return typeof value === "number" ? value : 0;
|
|
31
33
|
}
|
|
34
|
+
const ChromaEntrySchema = z
|
|
35
|
+
.object({
|
|
36
|
+
document: DocumentSchema,
|
|
37
|
+
metadata: MetadataSchema,
|
|
38
|
+
})
|
|
39
|
+
.transform((entry) => {
|
|
40
|
+
const metadata = entry.metadata ?? undefined;
|
|
41
|
+
return {
|
|
42
|
+
data: entry.document,
|
|
43
|
+
createdAt: extractTimestamp(metadata, "_createdAt"),
|
|
44
|
+
updatedAt: extractTimestamp(metadata, "_updatedAt"),
|
|
45
|
+
...(metadata && { metadata }),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
32
48
|
/**
|
|
33
49
|
* VectorMemory implementation backed by ChromaDB.
|
|
34
50
|
*
|
|
@@ -77,12 +93,7 @@ export class ChromaStore {
|
|
|
77
93
|
}
|
|
78
94
|
const document = response.documents?.[0];
|
|
79
95
|
const metadata = response.metadatas?.[0];
|
|
80
|
-
return {
|
|
81
|
-
data: parseDocument(document),
|
|
82
|
-
createdAt: extractTimestamp(metadata, "_createdAt"),
|
|
83
|
-
updatedAt: extractTimestamp(metadata, "_updatedAt"),
|
|
84
|
-
...(metadata && { metadata: metadata }),
|
|
85
|
-
};
|
|
96
|
+
return ChromaEntrySchema.parse({ document, metadata });
|
|
86
97
|
}
|
|
87
98
|
async set(key, data, metadata) {
|
|
88
99
|
const now = Date.now();
|
|
@@ -145,12 +156,10 @@ export class ChromaStore {
|
|
|
145
156
|
results.push({
|
|
146
157
|
key: id,
|
|
147
158
|
score,
|
|
148
|
-
entry: {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
...(metadata && { metadata: metadata }),
|
|
153
|
-
},
|
|
159
|
+
entry: ChromaEntrySchema.parse({
|
|
160
|
+
document: documents[i],
|
|
161
|
+
metadata,
|
|
162
|
+
}),
|
|
154
163
|
});
|
|
155
164
|
}
|
|
156
165
|
return results;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAiB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAiB,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,MAAM,cAAc,GAAG,CAAC;KACrB,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;IACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;KACb,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;QACpD,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE/E;;;GAGG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,QAAoD,EACpD,KAAkC;IAElC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,cAAc;CACzB,CAAC;KACD,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC;IAE7C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,SAAS,EAAE,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;QACnD,SAAS,EAAE,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;QACnD,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,OAAO,WAAW;IACL,UAAU,CAAa;IACvB,OAAO,CAAoB;IAE5C,YAAY,OAA2B;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACzC,GAAG,EAAE,CAAC,GAAG,CAAC;YACV,OAAO,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC;SACxD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzC,OAAO,iBAAiB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAmB,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,IAAO,EACP,QAAkC;QAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS,IAAI,GAAG,CAAC;QAE7C,iDAAiD;QACjD,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE5C,sCAAsC;QACtC,MAAM,cAAc,GAAa;YAC/B,GAAG,QAAQ;YACX,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,GAAG;SAChB,CAAC;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC3B,GAAG,EAAE,CAAC,GAAG,CAAC;YACV,UAAU,EAAE,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,SAAS,EAAE,CAAC,cAAc,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,OAA6B;QAE7B,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QAErC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAC3C,eAAe,EAAE,CAAC,WAAW,CAAC;YAC9B,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,WAAW,CAAC,SAAS;gBACrB,WAAW,CAAC,SAAS;gBACrB,WAAW,CAAC,SAAS;aACtB;SACF,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YAExC,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE9B,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,EAAE;gBACP,KAAK;gBACL,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;oBAC7B,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;oBACtB,QAAQ;iBACT,CAAmB;aACrB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGrC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,oBAAyB;YAQhC,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAiBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAyBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAG3B;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/memory/postgres.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { Pool } from "pg";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const KVRowSchema = z
|
|
4
|
+
.object({
|
|
5
|
+
key: z.string(),
|
|
6
|
+
data: z.unknown(),
|
|
7
|
+
created_at: z.coerce.date(),
|
|
8
|
+
updated_at: z.coerce.date(),
|
|
9
|
+
metadata: z.record(z.string(), z.unknown()).nullable(),
|
|
10
|
+
})
|
|
11
|
+
.transform((row) => ({
|
|
12
|
+
data: row.data,
|
|
13
|
+
createdAt: row.created_at.getTime(),
|
|
14
|
+
updatedAt: row.updated_at.getTime(),
|
|
15
|
+
...(row.metadata && { metadata: row.metadata }),
|
|
16
|
+
}));
|
|
2
17
|
/**
|
|
3
18
|
* Postgres-backed implementation of KVMemory.
|
|
4
19
|
*
|
|
@@ -67,12 +82,7 @@ export class PostgresStore {
|
|
|
67
82
|
if (row === undefined) {
|
|
68
83
|
return null;
|
|
69
84
|
}
|
|
70
|
-
return
|
|
71
|
-
data: row.data,
|
|
72
|
-
createdAt: new Date(row.created_at).getTime(),
|
|
73
|
-
updatedAt: new Date(row.updated_at).getTime(),
|
|
74
|
-
...(row.metadata && { metadata: row.metadata }),
|
|
75
|
-
};
|
|
85
|
+
return KVRowSchema.parse(row);
|
|
76
86
|
}
|
|
77
87
|
async set(key, data, metadata) {
|
|
78
88
|
await this.ensureTable();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/memory/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,KAAK,EAAE,iBAAiB,CAAC;IACzB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAEpC,OAAO,EAAE,kBAAkB;IAOjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA0BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;CAiCpC"}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const QdrantPayloadSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
data: z.unknown(),
|
|
5
|
+
createdAt: z.number(),
|
|
6
|
+
updatedAt: z.number(),
|
|
7
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
8
|
+
})
|
|
9
|
+
.transform((payload) => ({
|
|
10
|
+
data: payload.data,
|
|
11
|
+
createdAt: payload.createdAt,
|
|
12
|
+
updatedAt: payload.updatedAt,
|
|
13
|
+
...(payload.metadata && { metadata: payload.metadata }),
|
|
14
|
+
}));
|
|
1
15
|
/**
|
|
2
16
|
* VectorMemory implementation backed by Qdrant.
|
|
3
17
|
*
|
|
@@ -49,15 +63,10 @@ export class QdrantStore {
|
|
|
49
63
|
if (!point) {
|
|
50
64
|
return null;
|
|
51
65
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
createdAt: payload.createdAt,
|
|
57
|
-
updatedAt: payload.updatedAt,
|
|
58
|
-
...(payload.metadata && { metadata: payload.metadata }),
|
|
59
|
-
}
|
|
60
|
-
: null;
|
|
66
|
+
if (!point.payload) {
|
|
67
|
+
throw new Error("QdrantStore: payload is missing from entry");
|
|
68
|
+
}
|
|
69
|
+
return QdrantPayloadSchema.parse(point.payload);
|
|
61
70
|
}
|
|
62
71
|
async set(key, data, metadata) {
|
|
63
72
|
const now = Date.now();
|
|
@@ -76,7 +85,7 @@ export class QdrantStore {
|
|
|
76
85
|
{
|
|
77
86
|
id: key,
|
|
78
87
|
vector: this.vectorName ? { [this.vectorName]: vector } : vector,
|
|
79
|
-
payload
|
|
88
|
+
payload,
|
|
80
89
|
},
|
|
81
90
|
],
|
|
82
91
|
});
|
|
@@ -106,19 +115,14 @@ export class QdrantStore {
|
|
|
106
115
|
});
|
|
107
116
|
const results = [];
|
|
108
117
|
for (const point of response) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
continue;
|
|
118
|
+
if (!point.payload) {
|
|
119
|
+
throw new Error("QdrantStore: payload is missing from entry");
|
|
112
120
|
}
|
|
121
|
+
const entry = QdrantPayloadSchema.parse(point.payload);
|
|
113
122
|
results.push({
|
|
114
123
|
key: String(point.id),
|
|
115
124
|
score: point.score,
|
|
116
|
-
entry
|
|
117
|
-
data: payload.data,
|
|
118
|
-
createdAt: payload.createdAt,
|
|
119
|
-
updatedAt: payload.updatedAt,
|
|
120
|
-
...(payload.metadata && { metadata: payload.metadata }),
|
|
121
|
-
},
|
|
125
|
+
entry,
|
|
122
126
|
});
|
|
123
127
|
}
|
|
124
128
|
return results;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,OAAO,GAAE,iBAAsB;IAW3C,OAAO,CAAC,WAAW;IAIb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAWhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA6BV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/memory/redis.js
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
import Redis from "ioredis";
|
|
2
|
-
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const StoredEntrySchema = z
|
|
4
|
+
.preprocess((value) => {
|
|
5
|
+
if (typeof value === "string") {
|
|
6
|
+
return JSON.parse(value);
|
|
7
|
+
}
|
|
8
|
+
return value;
|
|
9
|
+
}, z.object({
|
|
10
|
+
data: z.unknown(),
|
|
11
|
+
createdAt: z.number(),
|
|
12
|
+
updatedAt: z.number(),
|
|
13
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
14
|
+
}))
|
|
15
|
+
.transform((entry) => ({
|
|
16
|
+
data: entry.data,
|
|
17
|
+
createdAt: entry.createdAt,
|
|
18
|
+
updatedAt: entry.updatedAt,
|
|
19
|
+
...(entry.metadata && { metadata: entry.metadata }),
|
|
20
|
+
}));
|
|
3
21
|
/**
|
|
4
22
|
* Redis-backed implementation of KVMemory.
|
|
5
23
|
*
|
|
@@ -55,13 +73,7 @@ export class RedisStore {
|
|
|
55
73
|
if (raw === null) {
|
|
56
74
|
return null;
|
|
57
75
|
}
|
|
58
|
-
|
|
59
|
-
return {
|
|
60
|
-
data: stored.data,
|
|
61
|
-
createdAt: stored.createdAt,
|
|
62
|
-
updatedAt: stored.updatedAt,
|
|
63
|
-
...(stored.metadata && { metadata: stored.metadata }),
|
|
64
|
-
};
|
|
76
|
+
return StoredEntrySchema.parse(raw);
|
|
65
77
|
}
|
|
66
78
|
async set(key, data, metadata) {
|
|
67
79
|
const prefixedKey = this.prefixedKey(key);
|
|
@@ -70,7 +82,7 @@ export class RedisStore {
|
|
|
70
82
|
const existingRaw = await this.client.get(prefixedKey);
|
|
71
83
|
let createdAt = now;
|
|
72
84
|
if (existingRaw !== null) {
|
|
73
|
-
const existing =
|
|
85
|
+
const existing = StoredEntrySchema.parse(existingRaw);
|
|
74
86
|
createdAt = existing.createdAt;
|
|
75
87
|
}
|
|
76
88
|
const entry = {
|
package/dist/memory/redis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { MemoryEntry } from "./key-value";
|
|
3
|
+
import type { SqliteConnectionOptions, SqliteDatabase } from "./sqlite";
|
|
4
|
+
import type { VectorMemory, VectorSearchOptions, VectorSearchResult } from "./vector";
|
|
5
|
+
/**
|
|
6
|
+
* Function to generate embeddings for text.
|
|
7
|
+
*/
|
|
8
|
+
export type EmbeddingFunction = (text: string) => Promise<number[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Configuration options for the SQLite vector store.
|
|
11
|
+
*/
|
|
12
|
+
export interface SqliteVectorStoreOptions<T = unknown> {
|
|
13
|
+
/**
|
|
14
|
+
* Database filename. Use ":memory:" for in-memory databases.
|
|
15
|
+
* @default ":memory:"
|
|
16
|
+
*/
|
|
17
|
+
filename?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Options passed to the libSQL client.
|
|
20
|
+
*/
|
|
21
|
+
options?: SqliteConnectionOptions;
|
|
22
|
+
/**
|
|
23
|
+
* Provide an existing database client (overrides filename/options).
|
|
24
|
+
*/
|
|
25
|
+
database?: SqliteDatabase;
|
|
26
|
+
/**
|
|
27
|
+
* Table name for storing entries.
|
|
28
|
+
* The table will be created automatically if it doesn't exist.
|
|
29
|
+
* @default "cria_vector_store"
|
|
30
|
+
*/
|
|
31
|
+
tableName?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Vector dimensionality (must match embedding length).
|
|
34
|
+
*/
|
|
35
|
+
dimensions: number;
|
|
36
|
+
/**
|
|
37
|
+
* Function to generate embeddings from text.
|
|
38
|
+
*/
|
|
39
|
+
embed: EmbeddingFunction;
|
|
40
|
+
/**
|
|
41
|
+
* Schema for validating stored data.
|
|
42
|
+
*/
|
|
43
|
+
schema: z.ZodType<T>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* SQLite-backed implementation of VectorMemory.
|
|
47
|
+
*
|
|
48
|
+
* Uses libSQL vector columns and vector indexes for DB-side similarity search.
|
|
49
|
+
*
|
|
50
|
+
* @template T - The type of data to store
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* import { z } from "zod";
|
|
55
|
+
* import { SqliteVectorStore } from "@fastpaca/cria/memory/sqlite-vector";
|
|
56
|
+
*
|
|
57
|
+
* const store = new SqliteVectorStore<string>({
|
|
58
|
+
* filename: "cria.sqlite",
|
|
59
|
+
* dimensions: 1536,
|
|
60
|
+
* embed: async (text) => getEmbedding(text),
|
|
61
|
+
* schema: z.string(),
|
|
62
|
+
* });
|
|
63
|
+
*
|
|
64
|
+
* const results = await store.search("What is RAG?", { limit: 5 });
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare class SqliteVectorStore<T = unknown> implements VectorMemory<T> {
|
|
68
|
+
private readonly db;
|
|
69
|
+
private readonly tableName;
|
|
70
|
+
private readonly embedFn;
|
|
71
|
+
private readonly dimensions;
|
|
72
|
+
private readonly schema;
|
|
73
|
+
private readonly embeddingSchema;
|
|
74
|
+
private tableCreated;
|
|
75
|
+
private indexCreated;
|
|
76
|
+
constructor(options: SqliteVectorStoreOptions<T>);
|
|
77
|
+
private ensureTable;
|
|
78
|
+
private ensureIndex;
|
|
79
|
+
get(key: string): Promise<MemoryEntry<T> | null>;
|
|
80
|
+
set(key: string, data: T, metadata?: Record<string, unknown>): Promise<void>;
|
|
81
|
+
delete(key: string): Promise<boolean>;
|
|
82
|
+
search(query: string, options?: VectorSearchOptions): Promise<VectorSearchResult<T>[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Close the database connection.
|
|
85
|
+
* Call this when you're done using the store to clean up resources.
|
|
86
|
+
*/
|
|
87
|
+
close(): void;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=sqlite-vector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-vector.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite-vector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,GAAG,OAAO;IACnD;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,EAAE,iBAAiB,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACtB;AAWD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC;YAwBlC,WAAW;YAmBX,WAAW;IAenB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IA4BhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAuCV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAsEnC;;;OAGG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { createClient } from "@libsql/client";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const metadataSchema = z.object({}).catchall(z.unknown());
|
|
4
|
+
const sqliteRowSchema = z.object({
|
|
5
|
+
key: z.string(),
|
|
6
|
+
data: z.string(),
|
|
7
|
+
created_at: z.number(),
|
|
8
|
+
updated_at: z.number(),
|
|
9
|
+
metadata: z.string().nullable(),
|
|
10
|
+
});
|
|
11
|
+
/**
|
|
12
|
+
* SQLite-backed implementation of VectorMemory.
|
|
13
|
+
*
|
|
14
|
+
* Uses libSQL vector columns and vector indexes for DB-side similarity search.
|
|
15
|
+
*
|
|
16
|
+
* @template T - The type of data to store
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { z } from "zod";
|
|
21
|
+
* import { SqliteVectorStore } from "@fastpaca/cria/memory/sqlite-vector";
|
|
22
|
+
*
|
|
23
|
+
* const store = new SqliteVectorStore<string>({
|
|
24
|
+
* filename: "cria.sqlite",
|
|
25
|
+
* dimensions: 1536,
|
|
26
|
+
* embed: async (text) => getEmbedding(text),
|
|
27
|
+
* schema: z.string(),
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* const results = await store.search("What is RAG?", { limit: 5 });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export class SqliteVectorStore {
|
|
34
|
+
db;
|
|
35
|
+
tableName;
|
|
36
|
+
embedFn;
|
|
37
|
+
dimensions;
|
|
38
|
+
schema;
|
|
39
|
+
embeddingSchema;
|
|
40
|
+
tableCreated = false;
|
|
41
|
+
indexCreated = false;
|
|
42
|
+
constructor(options) {
|
|
43
|
+
const { filename = ":memory:", options: dbOptions, database, tableName = "cria_vector_store", dimensions, embed, schema, } = options;
|
|
44
|
+
this.db =
|
|
45
|
+
database ??
|
|
46
|
+
createClient({
|
|
47
|
+
url: filename === ":memory:" ? ":memory:" : `file:${filename}`,
|
|
48
|
+
...dbOptions,
|
|
49
|
+
});
|
|
50
|
+
this.tableName = tableName;
|
|
51
|
+
this.embedFn = embed;
|
|
52
|
+
this.dimensions = dimensions;
|
|
53
|
+
this.schema = schema;
|
|
54
|
+
this.embeddingSchema = z.array(z.number()).length(dimensions);
|
|
55
|
+
}
|
|
56
|
+
async ensureTable() {
|
|
57
|
+
if (this.tableCreated) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
await this.db.execute(`
|
|
61
|
+
CREATE TABLE IF NOT EXISTS ${this.tableName} (
|
|
62
|
+
key TEXT PRIMARY KEY,
|
|
63
|
+
data TEXT NOT NULL,
|
|
64
|
+
embedding F32_BLOB(${this.dimensions}) NOT NULL,
|
|
65
|
+
created_at INTEGER NOT NULL,
|
|
66
|
+
updated_at INTEGER NOT NULL,
|
|
67
|
+
metadata TEXT
|
|
68
|
+
)
|
|
69
|
+
`);
|
|
70
|
+
this.tableCreated = true;
|
|
71
|
+
}
|
|
72
|
+
async ensureIndex() {
|
|
73
|
+
if (this.indexCreated) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
await this.db.execute(`
|
|
77
|
+
CREATE INDEX IF NOT EXISTS ${this.tableName}_vector_idx
|
|
78
|
+
ON ${this.tableName} (
|
|
79
|
+
libsql_vector_idx(embedding, 'metric=cosine')
|
|
80
|
+
)
|
|
81
|
+
`);
|
|
82
|
+
this.indexCreated = true;
|
|
83
|
+
}
|
|
84
|
+
async get(key) {
|
|
85
|
+
await this.ensureTable();
|
|
86
|
+
const result = await this.db.execute({
|
|
87
|
+
sql: `SELECT key, data, created_at, updated_at, metadata FROM ${this.tableName} WHERE key = ?`,
|
|
88
|
+
args: [key],
|
|
89
|
+
});
|
|
90
|
+
const row = result.rows[0];
|
|
91
|
+
if (!row) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const parsedRow = sqliteRowSchema.parse(row);
|
|
95
|
+
const data = this.schema.parse(JSON.parse(parsedRow.data));
|
|
96
|
+
const metadata = parsedRow.metadata === null
|
|
97
|
+
? undefined
|
|
98
|
+
: metadataSchema.parse(JSON.parse(parsedRow.metadata));
|
|
99
|
+
return {
|
|
100
|
+
data,
|
|
101
|
+
createdAt: parsedRow.created_at,
|
|
102
|
+
updatedAt: parsedRow.updated_at,
|
|
103
|
+
...(metadata && { metadata }),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
async set(key, data, metadata) {
|
|
107
|
+
await this.ensureTable();
|
|
108
|
+
await this.ensureIndex();
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
const parsedData = this.schema.parse(data);
|
|
111
|
+
const serializedData = JSON.stringify(parsedData);
|
|
112
|
+
const serializedMetadata = metadata === undefined
|
|
113
|
+
? null
|
|
114
|
+
: JSON.stringify(metadataSchema.parse(metadata));
|
|
115
|
+
const textToEmbed = typeof parsedData === "string" ? parsedData : serializedData;
|
|
116
|
+
const embedding = this.embeddingSchema.parse(await this.embedFn(textToEmbed));
|
|
117
|
+
await this.db.execute({
|
|
118
|
+
sql: `
|
|
119
|
+
INSERT INTO ${this.tableName} (key, data, embedding, created_at, updated_at, metadata)
|
|
120
|
+
VALUES (?, ?, vector32(?), ?, ?, ?)
|
|
121
|
+
ON CONFLICT(key) DO UPDATE SET
|
|
122
|
+
data = excluded.data,
|
|
123
|
+
embedding = excluded.embedding,
|
|
124
|
+
updated_at = excluded.updated_at,
|
|
125
|
+
metadata = excluded.metadata
|
|
126
|
+
`,
|
|
127
|
+
args: [
|
|
128
|
+
key,
|
|
129
|
+
serializedData,
|
|
130
|
+
JSON.stringify(embedding),
|
|
131
|
+
now,
|
|
132
|
+
now,
|
|
133
|
+
serializedMetadata,
|
|
134
|
+
],
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
async delete(key) {
|
|
138
|
+
await this.ensureTable();
|
|
139
|
+
const result = await this.db.execute({
|
|
140
|
+
sql: `DELETE FROM ${this.tableName} WHERE key = ?`,
|
|
141
|
+
args: [key],
|
|
142
|
+
});
|
|
143
|
+
return result.rowsAffected > 0;
|
|
144
|
+
}
|
|
145
|
+
async search(query, options) {
|
|
146
|
+
await this.ensureTable();
|
|
147
|
+
await this.ensureIndex();
|
|
148
|
+
const limit = Math.max(0, Math.trunc(options?.limit ?? 10));
|
|
149
|
+
const threshold = options?.threshold;
|
|
150
|
+
const queryVector = this.embeddingSchema.parse(await this.embedFn(query));
|
|
151
|
+
const serializedQuery = JSON.stringify(queryVector);
|
|
152
|
+
const result = await this.db.execute({
|
|
153
|
+
sql: `
|
|
154
|
+
SELECT
|
|
155
|
+
t.key,
|
|
156
|
+
t.data,
|
|
157
|
+
t.created_at,
|
|
158
|
+
t.updated_at,
|
|
159
|
+
t.metadata,
|
|
160
|
+
vector_distance_cos(t.embedding, vector32(?)) AS distance
|
|
161
|
+
FROM vector_top_k(
|
|
162
|
+
?,
|
|
163
|
+
vector32(?),
|
|
164
|
+
CAST(? AS INTEGER)
|
|
165
|
+
) AS i
|
|
166
|
+
JOIN ${this.tableName} AS t ON t.rowid = i.id
|
|
167
|
+
ORDER BY distance ASC
|
|
168
|
+
`,
|
|
169
|
+
args: [
|
|
170
|
+
serializedQuery,
|
|
171
|
+
`${this.tableName}_vector_idx`,
|
|
172
|
+
serializedQuery,
|
|
173
|
+
limit,
|
|
174
|
+
],
|
|
175
|
+
});
|
|
176
|
+
const results = [];
|
|
177
|
+
const searchRowSchema = sqliteRowSchema.extend({
|
|
178
|
+
distance: z.number(),
|
|
179
|
+
});
|
|
180
|
+
for (const row of result.rows) {
|
|
181
|
+
const parsedRow = searchRowSchema.parse(row);
|
|
182
|
+
const score = Math.max(0, Math.min(1, 1 - parsedRow.distance / 2));
|
|
183
|
+
if (threshold !== undefined && score < threshold) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const data = this.schema.parse(JSON.parse(parsedRow.data));
|
|
187
|
+
const metadata = parsedRow.metadata === null
|
|
188
|
+
? undefined
|
|
189
|
+
: metadataSchema.parse(JSON.parse(parsedRow.metadata));
|
|
190
|
+
results.push({
|
|
191
|
+
key: parsedRow.key,
|
|
192
|
+
score,
|
|
193
|
+
entry: {
|
|
194
|
+
data,
|
|
195
|
+
createdAt: parsedRow.created_at,
|
|
196
|
+
updatedAt: parsedRow.updated_at,
|
|
197
|
+
...(metadata && { metadata }),
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return results;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Close the database connection.
|
|
205
|
+
* Call this when you're done using the store to clean up resources.
|
|
206
|
+
*/
|
|
207
|
+
close() {
|
|
208
|
+
this.db.close();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=sqlite-vector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-vector.js","sourceRoot":"","sources":["../../src/memory/sqlite-vector.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/sqlite.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type Client, type Config } from "@libsql/client";
|
|
2
2
|
import type { KVMemory, MemoryEntry } from "./key-value";
|
|
3
3
|
/**
|
|
4
|
-
* Connection options for a
|
|
4
|
+
* Connection options for a libSQL database.
|
|
5
5
|
*/
|
|
6
|
-
export type SqliteConnectionOptions =
|
|
6
|
+
export type SqliteConnectionOptions = Omit<Config, "url">;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* libSQL Client instance used by the store.
|
|
9
9
|
*/
|
|
10
|
-
export type SqliteDatabase =
|
|
10
|
+
export type SqliteDatabase = Client;
|
|
11
11
|
/**
|
|
12
12
|
* Configuration options for the SQLite store.
|
|
13
13
|
*/
|
|
@@ -18,11 +18,11 @@ export interface SqliteStoreOptions {
|
|
|
18
18
|
*/
|
|
19
19
|
filename?: string;
|
|
20
20
|
/**
|
|
21
|
-
* Options passed to the
|
|
21
|
+
* Options passed to the libSQL client.
|
|
22
22
|
*/
|
|
23
23
|
options?: SqliteConnectionOptions;
|
|
24
24
|
/**
|
|
25
|
-
* Provide an existing database
|
|
25
|
+
* Provide an existing database client (overrides filename/options).
|
|
26
26
|
*/
|
|
27
27
|
database?: SqliteDatabase;
|
|
28
28
|
/**
|
|
@@ -40,8 +40,8 @@ export interface SqliteStoreOptions {
|
|
|
40
40
|
/**
|
|
41
41
|
* SQLite-backed implementation of KVMemory.
|
|
42
42
|
*
|
|
43
|
-
* Plug-and-play adapter using
|
|
44
|
-
* an existing database
|
|
43
|
+
* Plug-and-play adapter using libSQL. Just pass a filename or
|
|
44
|
+
* an existing database client.
|
|
45
45
|
*
|
|
46
46
|
* @template T - The type of data to store
|
|
47
47
|
*
|
|
@@ -64,9 +64,9 @@ export declare class SqliteStore<T = unknown> implements KVMemory<T> {
|
|
|
64
64
|
private tableCreated;
|
|
65
65
|
constructor(options?: SqliteStoreOptions);
|
|
66
66
|
private ensureTable;
|
|
67
|
-
get(key: string): MemoryEntry<T> | null
|
|
68
|
-
set(key: string, data: T, metadata?: Record<string, unknown>): void
|
|
69
|
-
delete(key: string): boolean
|
|
67
|
+
get(key: string): Promise<MemoryEntry<T> | null>;
|
|
68
|
+
set(key: string, data: T, metadata?: Record<string, unknown>): Promise<void>;
|
|
69
|
+
delete(key: string): Promise<boolean>;
|
|
70
70
|
/**
|
|
71
71
|
* Close the database connection.
|
|
72
72
|
* Call this when you're done using the store to clean up resources.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AA0BpC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,kBAAuB;YAmB9B,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAgBhD,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAqBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C;;;OAGG;IACH,KAAK,IAAI,IAAI;CAGd;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/memory/sqlite.js
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createClient } from "@libsql/client";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const MetadataSchema = z.record(z.string(), z.unknown());
|
|
4
|
+
const SqliteRowSchema = z
|
|
5
|
+
.object({
|
|
6
|
+
key: z.string(),
|
|
7
|
+
data: z.string(),
|
|
8
|
+
created_at: z.coerce.number(),
|
|
9
|
+
updated_at: z.coerce.number(),
|
|
10
|
+
metadata: z.string().nullable(),
|
|
11
|
+
})
|
|
12
|
+
.transform((row) => {
|
|
13
|
+
const metadata = row.metadata === null
|
|
14
|
+
? undefined
|
|
15
|
+
: MetadataSchema.parse(JSON.parse(row.metadata));
|
|
16
|
+
return {
|
|
17
|
+
data: JSON.parse(row.data),
|
|
18
|
+
createdAt: row.created_at,
|
|
19
|
+
updatedAt: row.updated_at,
|
|
20
|
+
...(metadata && { metadata }),
|
|
21
|
+
};
|
|
22
|
+
});
|
|
2
23
|
/**
|
|
3
24
|
* SQLite-backed implementation of KVMemory.
|
|
4
25
|
*
|
|
5
|
-
* Plug-and-play adapter using
|
|
6
|
-
* an existing database
|
|
26
|
+
* Plug-and-play adapter using libSQL. Just pass a filename or
|
|
27
|
+
* an existing database client.
|
|
7
28
|
*
|
|
8
29
|
* @template T - The type of data to store
|
|
9
30
|
*
|
|
@@ -25,16 +46,21 @@ export class SqliteStore {
|
|
|
25
46
|
autoCreateTable;
|
|
26
47
|
tableCreated = false;
|
|
27
48
|
constructor(options = {}) {
|
|
28
|
-
const { filename, options: dbOptions, database, tableName, autoCreateTable, } = options;
|
|
29
|
-
this.db =
|
|
30
|
-
|
|
31
|
-
|
|
49
|
+
const { filename = ":memory:", options: dbOptions, database, tableName = "cria_kv_store", autoCreateTable = true, } = options;
|
|
50
|
+
this.db =
|
|
51
|
+
database ??
|
|
52
|
+
createClient({
|
|
53
|
+
url: filename === ":memory:" ? ":memory:" : `file:${filename}`,
|
|
54
|
+
...dbOptions,
|
|
55
|
+
});
|
|
56
|
+
this.tableName = tableName;
|
|
57
|
+
this.autoCreateTable = autoCreateTable;
|
|
32
58
|
}
|
|
33
|
-
ensureTable() {
|
|
59
|
+
async ensureTable() {
|
|
34
60
|
if (this.tableCreated || !this.autoCreateTable) {
|
|
35
61
|
return;
|
|
36
62
|
}
|
|
37
|
-
this.db.
|
|
63
|
+
await this.db.execute(`
|
|
38
64
|
CREATE TABLE IF NOT EXISTS ${this.tableName} (
|
|
39
65
|
key TEXT PRIMARY KEY,
|
|
40
66
|
data TEXT NOT NULL,
|
|
@@ -45,47 +71,42 @@ export class SqliteStore {
|
|
|
45
71
|
`);
|
|
46
72
|
this.tableCreated = true;
|
|
47
73
|
}
|
|
48
|
-
get(key) {
|
|
49
|
-
this.ensureTable();
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
74
|
+
async get(key) {
|
|
75
|
+
await this.ensureTable();
|
|
76
|
+
const result = await this.db.execute({
|
|
77
|
+
sql: `SELECT key, data, created_at, updated_at, metadata FROM ${this.tableName} WHERE key = ?`,
|
|
78
|
+
args: [key],
|
|
79
|
+
});
|
|
80
|
+
const row = result.rows[0];
|
|
53
81
|
if (row === undefined) {
|
|
54
82
|
return null;
|
|
55
83
|
}
|
|
56
|
-
|
|
57
|
-
const metadata = row.metadata === null
|
|
58
|
-
? undefined
|
|
59
|
-
: JSON.parse(row.metadata);
|
|
60
|
-
return {
|
|
61
|
-
data,
|
|
62
|
-
createdAt: row.created_at,
|
|
63
|
-
updatedAt: row.updated_at,
|
|
64
|
-
...(metadata && { metadata }),
|
|
65
|
-
};
|
|
84
|
+
return SqliteRowSchema.parse(row);
|
|
66
85
|
}
|
|
67
|
-
set(key, data, metadata) {
|
|
68
|
-
this.ensureTable();
|
|
86
|
+
async set(key, data, metadata) {
|
|
87
|
+
await this.ensureTable();
|
|
69
88
|
const now = Date.now();
|
|
70
89
|
const serializedData = JSON.stringify(data);
|
|
71
90
|
const serializedMetadata = metadata !== undefined ? JSON.stringify(metadata) : null;
|
|
72
|
-
this.db
|
|
73
|
-
|
|
91
|
+
await this.db.execute({
|
|
92
|
+
sql: `
|
|
74
93
|
INSERT INTO ${this.tableName} (key, data, created_at, updated_at, metadata)
|
|
75
94
|
VALUES (?, ?, ?, ?, ?)
|
|
76
95
|
ON CONFLICT(key) DO UPDATE SET
|
|
77
96
|
data = excluded.data,
|
|
78
97
|
updated_at = excluded.updated_at,
|
|
79
98
|
metadata = excluded.metadata
|
|
80
|
-
|
|
81
|
-
|
|
99
|
+
`,
|
|
100
|
+
args: [key, serializedData, now, now, serializedMetadata],
|
|
101
|
+
});
|
|
82
102
|
}
|
|
83
|
-
delete(key) {
|
|
84
|
-
this.ensureTable();
|
|
85
|
-
const result = this.db
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
103
|
+
async delete(key) {
|
|
104
|
+
await this.ensureTable();
|
|
105
|
+
const result = await this.db.execute({
|
|
106
|
+
sql: `DELETE FROM ${this.tableName} WHERE key = ?`,
|
|
107
|
+
args: [key],
|
|
108
|
+
});
|
|
109
|
+
return result.rowsAffected > 0;
|
|
89
110
|
}
|
|
90
111
|
/**
|
|
91
112
|
* Close the database connection.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fastpaca/cria",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.2",
|
|
4
4
|
"description": "Lightweight, fast, and tiny LLM Context & Memory layout renderer to enforce token budgets in long running agents.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "seb@fastpaca.com",
|
|
@@ -45,6 +45,10 @@
|
|
|
45
45
|
"types": "./dist/memory/sqlite.d.ts",
|
|
46
46
|
"import": "./dist/memory/sqlite.js"
|
|
47
47
|
},
|
|
48
|
+
"./memory/sqlite-vector": {
|
|
49
|
+
"types": "./dist/memory/sqlite-vector.d.ts",
|
|
50
|
+
"import": "./dist/memory/sqlite-vector.js"
|
|
51
|
+
},
|
|
48
52
|
"./memory/chroma": {
|
|
49
53
|
"types": "./dist/memory/chroma/index.d.ts",
|
|
50
54
|
"import": "./dist/memory/chroma/index.js"
|
|
@@ -60,9 +64,9 @@
|
|
|
60
64
|
},
|
|
61
65
|
"peerDependencies": {
|
|
62
66
|
"@anthropic-ai/sdk": "^0.20.0",
|
|
67
|
+
"@libsql/client": "^0.17.0",
|
|
63
68
|
"@qdrant/js-client-rest": "^1.0.0",
|
|
64
69
|
"ai": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
|
|
65
|
-
"better-sqlite3": "^12.0.0",
|
|
66
70
|
"chromadb": "^1.0.0 || ^2.0.0 || ^3.0.0",
|
|
67
71
|
"ioredis": "^5.0.0",
|
|
68
72
|
"openai": "^4.0.0 || ^5.0.0 || ^6.0.0",
|
|
@@ -72,13 +76,13 @@
|
|
|
72
76
|
"@anthropic-ai/sdk": {
|
|
73
77
|
"optional": true
|
|
74
78
|
},
|
|
75
|
-
"@
|
|
79
|
+
"@libsql/client": {
|
|
76
80
|
"optional": true
|
|
77
81
|
},
|
|
78
|
-
"
|
|
82
|
+
"@qdrant/js-client-rest": {
|
|
79
83
|
"optional": true
|
|
80
84
|
},
|
|
81
|
-
"
|
|
85
|
+
"ai": {
|
|
82
86
|
"optional": true
|
|
83
87
|
},
|
|
84
88
|
"chromadb": {
|
|
@@ -117,11 +121,10 @@
|
|
|
117
121
|
"@qdrant/js-client-rest": "^1.16.2",
|
|
118
122
|
"@semantic-release/changelog": "^6.0.3",
|
|
119
123
|
"@semantic-release/git": "^10.0.1",
|
|
120
|
-
"@
|
|
124
|
+
"@libsql/client": "^0.17.0",
|
|
121
125
|
"@types/node": "^25.0.10",
|
|
122
126
|
"@types/pg": "^8.16.0",
|
|
123
127
|
"ai": "^6.0.45",
|
|
124
|
-
"better-sqlite3": "^12.0.0",
|
|
125
128
|
"chromadb": "^3.2.2",
|
|
126
129
|
"husky": "^9.1.7",
|
|
127
130
|
"ioredis": "^5.9.2",
|