@fastpaca/cria 1.7.0 → 1.7.1
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 +23 -1
- package/dist/memory/chroma/index.d.ts +0 -2
- package/dist/memory/chroma/index.d.ts.map +1 -1
- package/dist/memory/chroma/index.js +2 -15
- package/dist/memory/chroma/index.js.map +1 -1
- package/dist/memory/postgres.d.ts.map +1 -1
- package/dist/memory/postgres.js +1 -16
- package/dist/memory/postgres.js.map +1 -1
- package/dist/memory/qdrant/index.d.ts +0 -1
- package/dist/memory/qdrant/index.d.ts.map +1 -1
- package/dist/memory/qdrant/index.js +16 -25
- package/dist/memory/qdrant/index.js.map +1 -1
- package/dist/memory/redis.d.ts.map +1 -1
- package/dist/memory/redis.js +3 -28
- package/dist/memory/redis.js.map +1 -1
- package/dist/memory/sqlite.d.ts +77 -0
- package/dist/memory/sqlite.d.ts.map +1 -0
- package/dist/memory/sqlite.js +98 -0
- package/dist/memory/sqlite.js.map +1 -0
- package/package.json +11 -1
package/README.md
CHANGED
|
@@ -302,6 +302,28 @@ const messages = await cria
|
|
|
302
302
|
|
|
303
303
|
</details>
|
|
304
304
|
|
|
305
|
+
<details>
|
|
306
|
+
<summary><strong>SQLite (conversation summaries)</strong></summary>
|
|
307
|
+
|
|
308
|
+
```ts
|
|
309
|
+
import { SqliteStore } from "@fastpaca/cria/memory/sqlite";
|
|
310
|
+
import type { StoredSummary } from "@fastpaca/cria";
|
|
311
|
+
|
|
312
|
+
const store = new SqliteStore<StoredSummary>({
|
|
313
|
+
filename: "cria.sqlite",
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
const messages = await cria
|
|
317
|
+
.prompt(provider)
|
|
318
|
+
.system("You are a helpful assistant.")
|
|
319
|
+
.summary(conversation, { id: "conv-123", store, priority: 2 })
|
|
320
|
+
.last(conversation, { n: 20 })
|
|
321
|
+
.user(query)
|
|
322
|
+
.render({ budget: 128_000 });
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
</details>
|
|
326
|
+
|
|
305
327
|
<details>
|
|
306
328
|
<summary><strong>Chroma (vector search)</strong></summary>
|
|
307
329
|
|
|
@@ -367,7 +389,7 @@ const messages = await cria
|
|
|
367
389
|
Prompt structures/messages (via a provider adapter). You pass the rendered output into your existing LLM SDK call.
|
|
368
390
|
|
|
369
391
|
**What works out of the box?**
|
|
370
|
-
Provider adapters for OpenAI (Chat Completions + Responses), Anthropic, and Vercel AI SDK; store adapters for Redis, Postgres, Chroma, and Qdrant.
|
|
392
|
+
Provider adapters for OpenAI (Chat Completions + Responses), Anthropic, and Vercel AI SDK; store adapters for Redis, SQLite, Postgres, Chroma, and Qdrant.
|
|
371
393
|
|
|
372
394
|
**How do I validate component swaps?**
|
|
373
395
|
Swap via adapters, diff the rendered prompt output, and run prompt eval/tests to catch drift.
|
|
@@ -49,11 +49,9 @@ export declare class ChromaStore<T = unknown> implements VectorMemory<T> {
|
|
|
49
49
|
private readonly collection;
|
|
50
50
|
private readonly embedFn;
|
|
51
51
|
constructor(options: ChromaStoreOptions);
|
|
52
|
-
private embed;
|
|
53
52
|
get(key: string): Promise<MemoryEntry<T> | null>;
|
|
54
53
|
set(key: string, data: T, metadata?: Record<string, unknown>): Promise<void>;
|
|
55
54
|
delete(key: string): Promise<boolean>;
|
|
56
55
|
search(query: string, options?: VectorSearchOptions): Promise<VectorSearchResult<T>[]>;
|
|
57
|
-
private buildSearchResults;
|
|
58
56
|
}
|
|
59
57
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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;AACvE,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;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;
|
|
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;AACvE,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;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;IAqBhD,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;CAoDpC"}
|
|
@@ -67,16 +67,6 @@ export class ChromaStore {
|
|
|
67
67
|
this.collection = options.collection;
|
|
68
68
|
this.embedFn = options.embed;
|
|
69
69
|
}
|
|
70
|
-
async embed(text, context) {
|
|
71
|
-
try {
|
|
72
|
-
return await this.embedFn(text);
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
throw new Error(`ChromaStore: embedding failed during ${context}`, {
|
|
76
|
-
cause: error,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
70
|
async get(key) {
|
|
81
71
|
const response = await this.collection.get({
|
|
82
72
|
ids: [key],
|
|
@@ -101,7 +91,7 @@ export class ChromaStore {
|
|
|
101
91
|
const createdAt = existing?.createdAt ?? now;
|
|
102
92
|
// Convert data to text for embedding and storage
|
|
103
93
|
const document = typeof data === "string" ? data : JSON.stringify(data);
|
|
104
|
-
const vector = await this.
|
|
94
|
+
const vector = await this.embedFn(document);
|
|
105
95
|
// Merge user metadata with timestamps
|
|
106
96
|
const chromaMetadata = {
|
|
107
97
|
...metadata,
|
|
@@ -126,7 +116,7 @@ export class ChromaStore {
|
|
|
126
116
|
async search(query, options) {
|
|
127
117
|
const limit = options?.limit ?? 10;
|
|
128
118
|
const threshold = options?.threshold;
|
|
129
|
-
const queryVector = await this.
|
|
119
|
+
const queryVector = await this.embedFn(query);
|
|
130
120
|
const response = await this.collection.query({
|
|
131
121
|
queryEmbeddings: [queryVector],
|
|
132
122
|
nResults: limit,
|
|
@@ -140,9 +130,6 @@ export class ChromaStore {
|
|
|
140
130
|
const documents = response.documents?.[0] ?? [];
|
|
141
131
|
const metadatas = response.metadatas?.[0] ?? [];
|
|
142
132
|
const distances = response.distances?.[0] ?? [];
|
|
143
|
-
return this.buildSearchResults(ids, documents, metadatas, distances, threshold);
|
|
144
|
-
}
|
|
145
|
-
buildSearchResults(ids, documents, metadatas, distances, threshold) {
|
|
146
133
|
const results = [];
|
|
147
134
|
for (let i = 0; i < ids.length; i++) {
|
|
148
135
|
const id = ids[i];
|
|
@@ -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;AAuBvE;;;GAGG;AACH,SAAS,aAAa,CAAI,QAAmC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;QACpD,OAAO,QAAa,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,QAAqC,EACrC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/chroma/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;AAErC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,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;AAErC,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;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;IAsBhD,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,18 +1,4 @@
|
|
|
1
1
|
import { Pool } from "pg";
|
|
2
|
-
const IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
3
|
-
const sanitizeIdentifier = (identifier) => {
|
|
4
|
-
const parts = identifier.split(".");
|
|
5
|
-
if (parts.length === 0) {
|
|
6
|
-
throw new Error("Table name must not be empty");
|
|
7
|
-
}
|
|
8
|
-
const sanitized = parts.map((part) => {
|
|
9
|
-
if (!IDENTIFIER_PATTERN.test(part)) {
|
|
10
|
-
throw new Error("Invalid table name: use letters, numbers, and underscores (optionally schema.table)");
|
|
11
|
-
}
|
|
12
|
-
return `"${part}"`;
|
|
13
|
-
});
|
|
14
|
-
return sanitized.join(".");
|
|
15
|
-
};
|
|
16
2
|
/**
|
|
17
3
|
* Postgres-backed implementation of KVMemory.
|
|
18
4
|
*
|
|
@@ -55,8 +41,7 @@ export class PostgresStore {
|
|
|
55
41
|
tableCreated = false;
|
|
56
42
|
constructor(options = {}) {
|
|
57
43
|
const { tableName, autoCreateTable, ...poolConfig } = options;
|
|
58
|
-
|
|
59
|
-
this.tableName = sanitizedTableName;
|
|
44
|
+
this.tableName = tableName ?? "cria_kv_store";
|
|
60
45
|
this.pool = new Pool(poolConfig);
|
|
61
46
|
this.autoCreateTable = autoCreateTable ?? true;
|
|
62
47
|
}
|
|
@@ -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":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAgC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,aAAa;IACP,IAAI,CAAO;IACX,SAAS,CAAS;IAClB,eAAe,CAAU;IAClC,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,UAAgC,EAAE;QAC5C,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC;QAE9D,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,eAAe,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;mCACS,IAAI,CAAC,SAAS;;;;;;;KAO5C,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,2DAA2D,IAAI,CAAC,SAAS,iBAAiB,EAC1F,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAS;YACnB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;YAC7C,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;YAC7C,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,IAAO,EACP,QAAkC;QAElC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,oDAAoD;QACpD,0DAA0D;QAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;oBACc,IAAI,CAAC,SAAS;;;;;;OAM3B,EACD;YACE,GAAG;YACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACpB,GAAG;YACH,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;SAC3C,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,eAAe,IAAI,CAAC,SAAS,iBAAiB,EAC9C,CAAC,GAAG,CAAC,CACN,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -55,7 +55,6 @@ export declare class QdrantStore<T = unknown> implements VectorMemory<T> {
|
|
|
55
55
|
private readonly embedFn;
|
|
56
56
|
private readonly vectorName;
|
|
57
57
|
constructor(options: QdrantStoreOptions);
|
|
58
|
-
private embed;
|
|
59
58
|
get(key: string): Promise<MemoryEntry<T> | null>;
|
|
60
59
|
set(key: string, data: T, metadata?: Record<string, unknown>): Promise<void>;
|
|
61
60
|
delete(key: string): Promise<boolean>;
|
|
@@ -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;AAC3D,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;
|
|
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;AAC3D,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;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;IAuBhD,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;CAsCpC"}
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Convert a Qdrant payload to a MemoryEntry.
|
|
3
|
-
*/
|
|
4
|
-
function payloadToEntry(payload) {
|
|
5
|
-
return {
|
|
6
|
-
data: payload.data,
|
|
7
|
-
createdAt: payload.createdAt,
|
|
8
|
-
updatedAt: payload.updatedAt,
|
|
9
|
-
...(payload.metadata && { metadata: payload.metadata }),
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
1
|
/**
|
|
13
2
|
* VectorMemory implementation backed by Qdrant.
|
|
14
3
|
*
|
|
@@ -51,16 +40,6 @@ export class QdrantStore {
|
|
|
51
40
|
this.embedFn = options.embed;
|
|
52
41
|
this.vectorName = options.vectorName;
|
|
53
42
|
}
|
|
54
|
-
async embed(text, context) {
|
|
55
|
-
try {
|
|
56
|
-
return await this.embedFn(text);
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
throw new Error(`QdrantStore: embedding failed during ${context}`, {
|
|
60
|
-
cause: error,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
43
|
async get(key) {
|
|
65
44
|
const response = await this.client.retrieve(this.collectionName, {
|
|
66
45
|
ids: [key],
|
|
@@ -71,13 +50,20 @@ export class QdrantStore {
|
|
|
71
50
|
return null;
|
|
72
51
|
}
|
|
73
52
|
const payload = point.payload;
|
|
74
|
-
return payload
|
|
53
|
+
return payload
|
|
54
|
+
? {
|
|
55
|
+
data: payload.data,
|
|
56
|
+
createdAt: payload.createdAt,
|
|
57
|
+
updatedAt: payload.updatedAt,
|
|
58
|
+
...(payload.metadata && { metadata: payload.metadata }),
|
|
59
|
+
}
|
|
60
|
+
: null;
|
|
75
61
|
}
|
|
76
62
|
async set(key, data, metadata) {
|
|
77
63
|
const now = Date.now();
|
|
78
64
|
// Convert data to text for embedding
|
|
79
65
|
const textToEmbed = typeof data === "string" ? data : JSON.stringify(data);
|
|
80
|
-
const vector = await this.
|
|
66
|
+
const vector = await this.embedFn(textToEmbed);
|
|
81
67
|
const payload = {
|
|
82
68
|
data,
|
|
83
69
|
createdAt: now,
|
|
@@ -109,7 +95,7 @@ export class QdrantStore {
|
|
|
109
95
|
async search(query, options) {
|
|
110
96
|
const limit = options?.limit ?? 10;
|
|
111
97
|
const threshold = options?.threshold;
|
|
112
|
-
const queryVector = await this.
|
|
98
|
+
const queryVector = await this.embedFn(query);
|
|
113
99
|
const response = await this.client.search(this.collectionName, {
|
|
114
100
|
vector: this.vectorName
|
|
115
101
|
? { name: this.vectorName, vector: queryVector }
|
|
@@ -127,7 +113,12 @@ export class QdrantStore {
|
|
|
127
113
|
results.push({
|
|
128
114
|
key: String(point.id),
|
|
129
115
|
score: point.score,
|
|
130
|
-
entry:
|
|
116
|
+
entry: {
|
|
117
|
+
data: payload.data,
|
|
118
|
+
createdAt: payload.createdAt,
|
|
119
|
+
updatedAt: payload.updatedAt,
|
|
120
|
+
...(payload.metadata && { metadata: payload.metadata }),
|
|
121
|
+
},
|
|
131
122
|
});
|
|
132
123
|
}
|
|
133
124
|
return results;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/memory/qdrant/index.ts"],"names":[],"mappings":"AAqCA
|
|
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;AAE5C,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;
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,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;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;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;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,30 +1,5 @@
|
|
|
1
1
|
import Redis from "ioredis";
|
|
2
|
-
const
|
|
3
|
-
const parseStoredEntry = (raw, key) => {
|
|
4
|
-
let parsed;
|
|
5
|
-
try {
|
|
6
|
-
parsed = JSON.parse(raw);
|
|
7
|
-
}
|
|
8
|
-
catch (error) {
|
|
9
|
-
throw new Error(`RedisStore: invalid JSON stored for key "${key}": ${String(error)}`);
|
|
10
|
-
}
|
|
11
|
-
if (!isRecord(parsed)) {
|
|
12
|
-
throw new Error(`RedisStore: stored value for key "${key}" is not an object`);
|
|
13
|
-
}
|
|
14
|
-
const { data, createdAt, updatedAt, metadata } = parsed;
|
|
15
|
-
if (typeof createdAt !== "number" || typeof updatedAt !== "number") {
|
|
16
|
-
throw new Error(`RedisStore: stored value for key "${key}" is missing createdAt/updatedAt timestamps`);
|
|
17
|
-
}
|
|
18
|
-
if (metadata !== undefined && !isRecord(metadata)) {
|
|
19
|
-
throw new Error(`RedisStore: stored metadata for key "${key}" must be an object if present`);
|
|
20
|
-
}
|
|
21
|
-
return {
|
|
22
|
-
data: data,
|
|
23
|
-
createdAt,
|
|
24
|
-
updatedAt,
|
|
25
|
-
...(metadata ? { metadata } : {}),
|
|
26
|
-
};
|
|
27
|
-
};
|
|
2
|
+
const parseStoredEntry = (raw) => JSON.parse(raw);
|
|
28
3
|
/**
|
|
29
4
|
* Redis-backed implementation of KVMemory.
|
|
30
5
|
*
|
|
@@ -80,7 +55,7 @@ export class RedisStore {
|
|
|
80
55
|
if (raw === null) {
|
|
81
56
|
return null;
|
|
82
57
|
}
|
|
83
|
-
const stored = parseStoredEntry(raw
|
|
58
|
+
const stored = parseStoredEntry(raw);
|
|
84
59
|
return {
|
|
85
60
|
data: stored.data,
|
|
86
61
|
createdAt: stored.createdAt,
|
|
@@ -95,7 +70,7 @@ export class RedisStore {
|
|
|
95
70
|
const existingRaw = await this.client.get(prefixedKey);
|
|
96
71
|
let createdAt = now;
|
|
97
72
|
if (existingRaw !== null) {
|
|
98
|
-
const existing = parseStoredEntry(existingRaw
|
|
73
|
+
const existing = parseStoredEntry(existingRaw);
|
|
99
74
|
createdAt = existing.createdAt;
|
|
100
75
|
}
|
|
101
76
|
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;AAiC5B,MAAM,
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/memory/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import type { KVMemory, MemoryEntry } from "./key-value";
|
|
3
|
+
/**
|
|
4
|
+
* Connection options for a SQLite database.
|
|
5
|
+
*/
|
|
6
|
+
export type SqliteConnectionOptions = Database.Options;
|
|
7
|
+
/**
|
|
8
|
+
* better-sqlite3 Database instance used by the store.
|
|
9
|
+
*/
|
|
10
|
+
export type SqliteDatabase = Database.Database;
|
|
11
|
+
/**
|
|
12
|
+
* Configuration options for the SQLite store.
|
|
13
|
+
*/
|
|
14
|
+
export interface SqliteStoreOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Database filename. Use ":memory:" for in-memory databases.
|
|
17
|
+
* @default ":memory:"
|
|
18
|
+
*/
|
|
19
|
+
filename?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Options passed to the SQLite driver.
|
|
22
|
+
*/
|
|
23
|
+
options?: SqliteConnectionOptions;
|
|
24
|
+
/**
|
|
25
|
+
* Provide an existing database instance (overrides filename/options).
|
|
26
|
+
*/
|
|
27
|
+
database?: SqliteDatabase;
|
|
28
|
+
/**
|
|
29
|
+
* Table name for storing entries.
|
|
30
|
+
* The table will be created automatically if it doesn't exist.
|
|
31
|
+
* @default "cria_kv_store"
|
|
32
|
+
*/
|
|
33
|
+
tableName?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Whether to create the table on first use if it doesn't exist.
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
autoCreateTable?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* SQLite-backed implementation of KVMemory.
|
|
42
|
+
*
|
|
43
|
+
* Plug-and-play adapter using better-sqlite3. Just pass a filename or
|
|
44
|
+
* an existing database instance.
|
|
45
|
+
*
|
|
46
|
+
* @template T - The type of data to store
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* import { SqliteStore } from "@fastpaca/cria/memory/sqlite";
|
|
51
|
+
*
|
|
52
|
+
* const store = new SqliteStore<{ content: string }>({
|
|
53
|
+
* filename: "cria.sqlite",
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* await store.set("key-1", { content: "Hello" });
|
|
57
|
+
* const entry = await store.get("key-1");
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare class SqliteStore<T = unknown> implements KVMemory<T> {
|
|
61
|
+
private readonly db;
|
|
62
|
+
private readonly tableName;
|
|
63
|
+
private readonly autoCreateTable;
|
|
64
|
+
private tableCreated;
|
|
65
|
+
constructor(options?: SqliteStoreOptions);
|
|
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;
|
|
70
|
+
/**
|
|
71
|
+
* Close the database connection.
|
|
72
|
+
* Call this when you're done using the store to clean up resources.
|
|
73
|
+
*/
|
|
74
|
+
close(): void;
|
|
75
|
+
}
|
|
76
|
+
export type { KVMemory, MemoryEntry } from "./key-value";
|
|
77
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,OAAO,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAU/C;;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;IAc5C,OAAO,CAAC,WAAW;IAkBnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IA2BvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAsBnE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU5B;;;OAGG;IACH,KAAK,IAAI,IAAI;CAGd;AAGD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
/**
|
|
3
|
+
* SQLite-backed implementation of KVMemory.
|
|
4
|
+
*
|
|
5
|
+
* Plug-and-play adapter using better-sqlite3. Just pass a filename or
|
|
6
|
+
* an existing database instance.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of data to store
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { SqliteStore } from "@fastpaca/cria/memory/sqlite";
|
|
13
|
+
*
|
|
14
|
+
* const store = new SqliteStore<{ content: string }>({
|
|
15
|
+
* filename: "cria.sqlite",
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* await store.set("key-1", { content: "Hello" });
|
|
19
|
+
* const entry = await store.get("key-1");
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export class SqliteStore {
|
|
23
|
+
db;
|
|
24
|
+
tableName;
|
|
25
|
+
autoCreateTable;
|
|
26
|
+
tableCreated = false;
|
|
27
|
+
constructor(options = {}) {
|
|
28
|
+
const { filename, options: dbOptions, database, tableName, autoCreateTable, } = options;
|
|
29
|
+
this.db = database ?? new Database(filename ?? ":memory:", dbOptions);
|
|
30
|
+
this.tableName = tableName ?? "cria_kv_store";
|
|
31
|
+
this.autoCreateTable = autoCreateTable ?? true;
|
|
32
|
+
}
|
|
33
|
+
ensureTable() {
|
|
34
|
+
if (this.tableCreated || !this.autoCreateTable) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
this.db.exec(`
|
|
38
|
+
CREATE TABLE IF NOT EXISTS ${this.tableName} (
|
|
39
|
+
key TEXT PRIMARY KEY,
|
|
40
|
+
data TEXT NOT NULL,
|
|
41
|
+
created_at INTEGER NOT NULL,
|
|
42
|
+
updated_at INTEGER NOT NULL,
|
|
43
|
+
metadata TEXT
|
|
44
|
+
)
|
|
45
|
+
`);
|
|
46
|
+
this.tableCreated = true;
|
|
47
|
+
}
|
|
48
|
+
get(key) {
|
|
49
|
+
this.ensureTable();
|
|
50
|
+
const row = this.db
|
|
51
|
+
.prepare(`SELECT key, data, created_at, updated_at, metadata FROM ${this.tableName} WHERE key = ?`)
|
|
52
|
+
.get(key);
|
|
53
|
+
if (row === undefined) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const data = JSON.parse(row.data);
|
|
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
|
+
};
|
|
66
|
+
}
|
|
67
|
+
set(key, data, metadata) {
|
|
68
|
+
this.ensureTable();
|
|
69
|
+
const now = Date.now();
|
|
70
|
+
const serializedData = JSON.stringify(data);
|
|
71
|
+
const serializedMetadata = metadata !== undefined ? JSON.stringify(metadata) : null;
|
|
72
|
+
this.db
|
|
73
|
+
.prepare(`
|
|
74
|
+
INSERT INTO ${this.tableName} (key, data, created_at, updated_at, metadata)
|
|
75
|
+
VALUES (?, ?, ?, ?, ?)
|
|
76
|
+
ON CONFLICT(key) DO UPDATE SET
|
|
77
|
+
data = excluded.data,
|
|
78
|
+
updated_at = excluded.updated_at,
|
|
79
|
+
metadata = excluded.metadata
|
|
80
|
+
`)
|
|
81
|
+
.run(key, serializedData, now, now, serializedMetadata);
|
|
82
|
+
}
|
|
83
|
+
delete(key) {
|
|
84
|
+
this.ensureTable();
|
|
85
|
+
const result = this.db
|
|
86
|
+
.prepare(`DELETE FROM ${this.tableName} WHERE key = ?`)
|
|
87
|
+
.run(key);
|
|
88
|
+
return result.changes > 0;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Close the database connection.
|
|
92
|
+
* Call this when you're done using the store to clean up resources.
|
|
93
|
+
*/
|
|
94
|
+
close() {
|
|
95
|
+
this.db.close();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAmDtC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,WAAW;IACL,EAAE,CAAiB;IACnB,SAAS,CAAS;IAClB,eAAe,CAAU;IAClC,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,UAA8B,EAAE;QAC1C,MAAM,EACJ,QAAQ,EACR,OAAO,EAAE,SAAS,EAClB,QAAQ,EACR,SAAS,EACT,eAAe,GAChB,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,EAAE,GAAG,QAAQ,IAAI,IAAI,QAAQ,CAAC,QAAQ,IAAI,UAAU,EAAE,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,eAAe,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC;IACjD,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;mCACkB,IAAI,CAAC,SAAS;;;;;;;KAO5C,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN,2DAA2D,IAAI,CAAC,SAAS,gBAAgB,CAC1F;aACA,GAAG,CAAC,GAAG,CAAC,CAAC;QAEZ,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAM,CAAC;QACvC,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ,KAAK,IAAI;YACnB,CAAC,CAAC,SAAS;YACX,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAA6B,CAAC;QAE5D,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,IAAO,EAAE,QAAkC;QAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,kBAAkB,GACtB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3D,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;sBACc,IAAI,CAAC,SAAS;;;;;;SAM3B,CACF;aACA,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CAAC,eAAe,IAAI,CAAC,SAAS,gBAAgB,CAAC;aACtD,GAAG,CAAC,GAAG,CAAC,CAAC;QAEZ,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fastpaca/cria",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.1",
|
|
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",
|
|
@@ -41,6 +41,10 @@
|
|
|
41
41
|
"types": "./dist/memory/postgres.d.ts",
|
|
42
42
|
"import": "./dist/memory/postgres.js"
|
|
43
43
|
},
|
|
44
|
+
"./memory/sqlite": {
|
|
45
|
+
"types": "./dist/memory/sqlite.d.ts",
|
|
46
|
+
"import": "./dist/memory/sqlite.js"
|
|
47
|
+
},
|
|
44
48
|
"./memory/chroma": {
|
|
45
49
|
"types": "./dist/memory/chroma/index.d.ts",
|
|
46
50
|
"import": "./dist/memory/chroma/index.js"
|
|
@@ -58,6 +62,7 @@
|
|
|
58
62
|
"@anthropic-ai/sdk": "^0.20.0",
|
|
59
63
|
"@qdrant/js-client-rest": "^1.0.0",
|
|
60
64
|
"ai": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
|
|
65
|
+
"better-sqlite3": "^12.0.0",
|
|
61
66
|
"chromadb": "^1.0.0 || ^2.0.0 || ^3.0.0",
|
|
62
67
|
"ioredis": "^5.0.0",
|
|
63
68
|
"openai": "^4.0.0 || ^5.0.0 || ^6.0.0",
|
|
@@ -73,6 +78,9 @@
|
|
|
73
78
|
"ai": {
|
|
74
79
|
"optional": true
|
|
75
80
|
},
|
|
81
|
+
"better-sqlite3": {
|
|
82
|
+
"optional": true
|
|
83
|
+
},
|
|
76
84
|
"chromadb": {
|
|
77
85
|
"optional": true
|
|
78
86
|
},
|
|
@@ -109,9 +117,11 @@
|
|
|
109
117
|
"@qdrant/js-client-rest": "^1.16.2",
|
|
110
118
|
"@semantic-release/changelog": "^6.0.3",
|
|
111
119
|
"@semantic-release/git": "^10.0.1",
|
|
120
|
+
"@types/better-sqlite3": "^7.6.9",
|
|
112
121
|
"@types/node": "^25.0.10",
|
|
113
122
|
"@types/pg": "^8.16.0",
|
|
114
123
|
"ai": "^6.0.45",
|
|
124
|
+
"better-sqlite3": "^12.0.0",
|
|
115
125
|
"chromadb": "^3.2.2",
|
|
116
126
|
"husky": "^9.1.7",
|
|
117
127
|
"ioredis": "^5.9.2",
|