@molroo-io/sdk 0.6.2 → 0.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 +100 -194
- package/dist/cjs/api-client.d.ts +2 -12
- package/dist/cjs/api-client.d.ts.map +1 -1
- package/dist/cjs/api-client.js +4 -42
- package/dist/cjs/errors.d.ts +1 -16
- package/dist/cjs/errors.d.ts.map +1 -1
- package/dist/cjs/errors.js +2 -18
- package/dist/cjs/events/types.d.ts +14 -21
- package/dist/cjs/events/types.d.ts.map +1 -1
- package/dist/cjs/events/types.js +0 -11
- package/dist/cjs/index.d.ts +26 -48
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +29 -52
- package/dist/cjs/llm/resolve.d.ts +4 -22
- package/dist/cjs/llm/resolve.d.ts.map +1 -1
- package/dist/cjs/llm/resolve.js +19 -7
- package/dist/cjs/llm/vercel-ai/adapter.d.ts +4 -10
- package/dist/cjs/llm/vercel-ai/adapter.d.ts.map +1 -1
- package/dist/cjs/llm/vercel-ai/adapter.js +6 -152
- package/dist/cjs/llm/vercel-ai/config.d.ts +8 -5
- package/dist/cjs/llm/vercel-ai/config.d.ts.map +1 -1
- package/dist/cjs/memory/in-memory.d.ts +14 -37
- package/dist/cjs/memory/in-memory.d.ts.map +1 -1
- package/dist/cjs/memory/in-memory.js +22 -85
- package/dist/cjs/memory/recall.d.ts +10 -21
- package/dist/cjs/memory/recall.d.ts.map +1 -1
- package/dist/cjs/memory/recall.js +12 -91
- package/dist/cjs/memory/types.d.ts +46 -186
- package/dist/cjs/memory/types.d.ts.map +1 -1
- package/dist/cjs/memory/types.js +0 -10
- package/dist/cjs/persona/chat-orchestrator.d.ts +46 -0
- package/dist/cjs/persona/chat-orchestrator.d.ts.map +1 -0
- package/dist/cjs/persona/chat-orchestrator.js +240 -0
- package/dist/cjs/persona/event-emitter.d.ts +7 -0
- package/dist/cjs/persona/event-emitter.d.ts.map +1 -0
- package/dist/cjs/persona/event-emitter.js +53 -0
- package/dist/cjs/persona/memory-pipeline.d.ts +26 -0
- package/dist/cjs/persona/memory-pipeline.d.ts.map +1 -0
- package/dist/cjs/persona/memory-pipeline.js +69 -0
- package/dist/cjs/persona.d.ts +56 -187
- package/dist/cjs/persona.d.ts.map +1 -1
- package/dist/cjs/persona.js +62 -638
- package/dist/cjs/shared/appraisal.d.ts +26 -0
- package/dist/cjs/shared/appraisal.d.ts.map +1 -0
- package/dist/cjs/shared/appraisal.js +45 -0
- package/dist/cjs/shared/client-factory.d.ts +23 -0
- package/dist/cjs/shared/client-factory.d.ts.map +1 -0
- package/dist/cjs/shared/client-factory.js +48 -0
- package/dist/cjs/shared/errors.d.ts +21 -0
- package/dist/cjs/shared/errors.d.ts.map +1 -0
- package/dist/cjs/shared/errors.js +29 -0
- package/dist/cjs/world/client.d.ts +2 -9
- package/dist/cjs/world/client.d.ts.map +1 -1
- package/dist/cjs/world/client.js +7 -34
- package/dist/cjs/world/errors.d.ts +1 -8
- package/dist/cjs/world/errors.d.ts.map +1 -1
- package/dist/cjs/world/errors.js +2 -12
- package/dist/cjs/world/index.d.ts +2 -2
- package/dist/cjs/world/index.d.ts.map +1 -1
- package/dist/cjs/world/types.d.ts +32 -5
- package/dist/cjs/world/types.d.ts.map +1 -1
- package/dist/cjs/world/world-domain.d.ts.map +1 -1
- package/dist/cjs/world/world-domain.js +4 -32
- package/dist/cjs/world/world-persona.d.ts +17 -12
- package/dist/cjs/world/world-persona.d.ts.map +1 -1
- package/dist/cjs/world/world-persona.js +6 -18
- package/dist/cjs/world/world.d.ts +28 -5
- package/dist/cjs/world/world.d.ts.map +1 -1
- package/dist/cjs/world/world.js +13 -11
- package/dist/esm/api-client.d.ts +2 -12
- package/dist/esm/api-client.d.ts.map +1 -1
- package/dist/esm/api-client.js +3 -38
- package/dist/esm/errors.d.ts +1 -16
- package/dist/esm/errors.d.ts.map +1 -1
- package/dist/esm/errors.js +1 -17
- package/dist/esm/events/types.d.ts +14 -21
- package/dist/esm/events/types.d.ts.map +1 -1
- package/dist/esm/events/types.js +0 -11
- package/dist/esm/index.d.ts +26 -48
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +25 -38
- package/dist/esm/llm/resolve.d.ts +4 -22
- package/dist/esm/llm/resolve.d.ts.map +1 -1
- package/dist/esm/llm/resolve.js +20 -8
- package/dist/esm/llm/vercel-ai/adapter.d.ts +4 -10
- package/dist/esm/llm/vercel-ai/adapter.d.ts.map +1 -1
- package/dist/esm/llm/vercel-ai/adapter.js +6 -119
- package/dist/esm/llm/vercel-ai/config.d.ts +8 -5
- package/dist/esm/llm/vercel-ai/config.d.ts.map +1 -1
- package/dist/esm/memory/in-memory.d.ts +14 -37
- package/dist/esm/memory/in-memory.d.ts.map +1 -1
- package/dist/esm/memory/in-memory.js +20 -83
- package/dist/esm/memory/recall.d.ts +10 -21
- package/dist/esm/memory/recall.d.ts.map +1 -1
- package/dist/esm/memory/recall.js +12 -91
- package/dist/esm/memory/types.d.ts +46 -186
- package/dist/esm/memory/types.d.ts.map +1 -1
- package/dist/esm/memory/types.js +1 -9
- package/dist/esm/persona/chat-orchestrator.d.ts +46 -0
- package/dist/esm/persona/chat-orchestrator.d.ts.map +1 -0
- package/dist/esm/persona/chat-orchestrator.js +204 -0
- package/dist/esm/persona/event-emitter.d.ts +7 -0
- package/dist/esm/persona/event-emitter.d.ts.map +1 -0
- package/dist/esm/persona/event-emitter.js +50 -0
- package/dist/esm/persona/memory-pipeline.d.ts +26 -0
- package/dist/esm/persona/memory-pipeline.d.ts.map +1 -0
- package/dist/esm/persona/memory-pipeline.js +65 -0
- package/dist/esm/persona.d.ts +56 -187
- package/dist/esm/persona.d.ts.map +1 -1
- package/dist/esm/persona.js +62 -638
- package/dist/esm/shared/appraisal.d.ts +26 -0
- package/dist/esm/shared/appraisal.d.ts.map +1 -0
- package/dist/esm/shared/appraisal.js +40 -0
- package/dist/esm/shared/client-factory.d.ts +23 -0
- package/dist/esm/shared/client-factory.d.ts.map +1 -0
- package/dist/esm/shared/client-factory.js +41 -0
- package/dist/esm/shared/errors.d.ts +21 -0
- package/dist/esm/shared/errors.d.ts.map +1 -0
- package/dist/esm/shared/errors.js +24 -0
- package/dist/esm/world/client.d.ts +2 -9
- package/dist/esm/world/client.d.ts.map +1 -1
- package/dist/esm/world/client.js +6 -30
- package/dist/esm/world/errors.d.ts +1 -8
- package/dist/esm/world/errors.d.ts.map +1 -1
- package/dist/esm/world/errors.js +1 -11
- package/dist/esm/world/index.d.ts +2 -2
- package/dist/esm/world/index.d.ts.map +1 -1
- package/dist/esm/world/types.d.ts +32 -5
- package/dist/esm/world/types.d.ts.map +1 -1
- package/dist/esm/world/world-domain.d.ts.map +1 -1
- package/dist/esm/world/world-domain.js +4 -32
- package/dist/esm/world/world-persona.d.ts +17 -12
- package/dist/esm/world/world-persona.d.ts.map +1 -1
- package/dist/esm/world/world-persona.js +6 -18
- package/dist/esm/world/world.d.ts +28 -5
- package/dist/esm/world/world.d.ts.map +1 -1
- package/dist/esm/world/world.js +13 -11
- package/package.json +4 -101
- package/dist/cjs/embedding/cloudflare.d.ts +0 -15
- package/dist/cjs/embedding/cloudflare.d.ts.map +0 -1
- package/dist/cjs/embedding/cloudflare.js +0 -16
- package/dist/cjs/embedding/cohere.d.ts +0 -8
- package/dist/cjs/embedding/cohere.d.ts.map +0 -1
- package/dist/cjs/embedding/cohere.js +0 -31
- package/dist/cjs/embedding/index.d.ts +0 -9
- package/dist/cjs/embedding/index.d.ts.map +0 -1
- package/dist/cjs/embedding/index.js +0 -11
- package/dist/cjs/embedding/local.d.ts +0 -6
- package/dist/cjs/embedding/local.d.ts.map +0 -1
- package/dist/cjs/embedding/local.js +0 -28
- package/dist/cjs/embedding/openai.d.ts +0 -9
- package/dist/cjs/embedding/openai.d.ts.map +0 -1
- package/dist/cjs/embedding/openai.js +0 -26
- package/dist/cjs/events/console.d.ts +0 -25
- package/dist/cjs/events/console.d.ts.map +0 -1
- package/dist/cjs/events/console.js +0 -41
- package/dist/cjs/events/webhook.d.ts +0 -30
- package/dist/cjs/events/webhook.d.ts.map +0 -1
- package/dist/cjs/events/webhook.js +0 -79
- package/dist/cjs/memory/cloudflare/index.d.ts +0 -3
- package/dist/cjs/memory/cloudflare/index.d.ts.map +0 -1
- package/dist/cjs/memory/cloudflare/index.js +0 -5
- package/dist/cjs/memory/cloudflare/vectorize.d.ts +0 -62
- package/dist/cjs/memory/cloudflare/vectorize.d.ts.map +0 -1
- package/dist/cjs/memory/cloudflare/vectorize.js +0 -55
- package/dist/cjs/memory/in-memory-semantic.d.ts +0 -16
- package/dist/cjs/memory/in-memory-semantic.d.ts.map +0 -1
- package/dist/cjs/memory/in-memory-semantic.js +0 -57
- package/dist/cjs/memory/pinecone/index.d.ts +0 -7
- package/dist/cjs/memory/pinecone/index.d.ts.map +0 -1
- package/dist/cjs/memory/pinecone/index.js +0 -8
- package/dist/cjs/memory/pinecone/memory-adapter.d.ts +0 -62
- package/dist/cjs/memory/pinecone/memory-adapter.d.ts.map +0 -1
- package/dist/cjs/memory/pinecone/memory-adapter.js +0 -220
- package/dist/cjs/memory/pinecone/semantic.d.ts +0 -44
- package/dist/cjs/memory/pinecone/semantic.d.ts.map +0 -1
- package/dist/cjs/memory/pinecone/semantic.js +0 -90
- package/dist/cjs/memory/sqlite/index.d.ts +0 -3
- package/dist/cjs/memory/sqlite/index.d.ts.map +0 -1
- package/dist/cjs/memory/sqlite/index.js +0 -5
- package/dist/cjs/memory/sqlite/memory-adapter.d.ts +0 -58
- package/dist/cjs/memory/sqlite/memory-adapter.d.ts.map +0 -1
- package/dist/cjs/memory/sqlite/memory-adapter.js +0 -336
- package/dist/cjs/memory/sqlite/schema.d.ts +0 -4
- package/dist/cjs/memory/sqlite/schema.d.ts.map +0 -1
- package/dist/cjs/memory/sqlite/schema.js +0 -91
- package/dist/cjs/memory/supabase/index.d.ts +0 -7
- package/dist/cjs/memory/supabase/index.d.ts.map +0 -1
- package/dist/cjs/memory/supabase/index.js +0 -8
- package/dist/cjs/memory/supabase/memory-adapter.d.ts +0 -67
- package/dist/cjs/memory/supabase/memory-adapter.d.ts.map +0 -1
- package/dist/cjs/memory/supabase/memory-adapter.js +0 -335
- package/dist/cjs/memory/supabase/semantic.d.ts +0 -44
- package/dist/cjs/memory/supabase/semantic.d.ts.map +0 -1
- package/dist/cjs/memory/supabase/semantic.js +0 -72
- package/dist/esm/embedding/cloudflare.d.ts +0 -15
- package/dist/esm/embedding/cloudflare.d.ts.map +0 -1
- package/dist/esm/embedding/cloudflare.js +0 -13
- package/dist/esm/embedding/cohere.d.ts +0 -8
- package/dist/esm/embedding/cohere.d.ts.map +0 -1
- package/dist/esm/embedding/cohere.js +0 -28
- package/dist/esm/embedding/index.d.ts +0 -9
- package/dist/esm/embedding/index.d.ts.map +0 -1
- package/dist/esm/embedding/index.js +0 -4
- package/dist/esm/embedding/local.d.ts +0 -6
- package/dist/esm/embedding/local.d.ts.map +0 -1
- package/dist/esm/embedding/local.js +0 -25
- package/dist/esm/embedding/openai.d.ts +0 -9
- package/dist/esm/embedding/openai.d.ts.map +0 -1
- package/dist/esm/embedding/openai.js +0 -23
- package/dist/esm/events/console.d.ts +0 -25
- package/dist/esm/events/console.d.ts.map +0 -1
- package/dist/esm/events/console.js +0 -37
- package/dist/esm/events/webhook.d.ts +0 -30
- package/dist/esm/events/webhook.d.ts.map +0 -1
- package/dist/esm/events/webhook.js +0 -75
- package/dist/esm/memory/cloudflare/index.d.ts +0 -3
- package/dist/esm/memory/cloudflare/index.d.ts.map +0 -1
- package/dist/esm/memory/cloudflare/index.js +0 -1
- package/dist/esm/memory/cloudflare/vectorize.d.ts +0 -62
- package/dist/esm/memory/cloudflare/vectorize.d.ts.map +0 -1
- package/dist/esm/memory/cloudflare/vectorize.js +0 -51
- package/dist/esm/memory/in-memory-semantic.d.ts +0 -16
- package/dist/esm/memory/in-memory-semantic.d.ts.map +0 -1
- package/dist/esm/memory/in-memory-semantic.js +0 -53
- package/dist/esm/memory/pinecone/index.d.ts +0 -7
- package/dist/esm/memory/pinecone/index.d.ts.map +0 -1
- package/dist/esm/memory/pinecone/index.js +0 -3
- package/dist/esm/memory/pinecone/memory-adapter.d.ts +0 -62
- package/dist/esm/memory/pinecone/memory-adapter.d.ts.map +0 -1
- package/dist/esm/memory/pinecone/memory-adapter.js +0 -216
- package/dist/esm/memory/pinecone/semantic.d.ts +0 -44
- package/dist/esm/memory/pinecone/semantic.d.ts.map +0 -1
- package/dist/esm/memory/pinecone/semantic.js +0 -86
- package/dist/esm/memory/sqlite/index.d.ts +0 -3
- package/dist/esm/memory/sqlite/index.d.ts.map +0 -1
- package/dist/esm/memory/sqlite/index.js +0 -1
- package/dist/esm/memory/sqlite/memory-adapter.d.ts +0 -58
- package/dist/esm/memory/sqlite/memory-adapter.d.ts.map +0 -1
- package/dist/esm/memory/sqlite/memory-adapter.js +0 -296
- package/dist/esm/memory/sqlite/schema.d.ts +0 -4
- package/dist/esm/memory/sqlite/schema.d.ts.map +0 -1
- package/dist/esm/memory/sqlite/schema.js +0 -86
- package/dist/esm/memory/supabase/index.d.ts +0 -7
- package/dist/esm/memory/supabase/index.d.ts.map +0 -1
- package/dist/esm/memory/supabase/index.js +0 -3
- package/dist/esm/memory/supabase/memory-adapter.d.ts +0 -67
- package/dist/esm/memory/supabase/memory-adapter.d.ts.map +0 -1
- package/dist/esm/memory/supabase/memory-adapter.js +0 -331
- package/dist/esm/memory/supabase/semantic.d.ts +0 -44
- package/dist/esm/memory/supabase/semantic.d.ts.map +0 -1
- package/dist/esm/memory/supabase/semantic.js +0 -68
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { EmbeddingAdapter } from '../types';
|
|
2
|
-
import type { SemanticMemory, SearchOptions, SearchResult } from '../semantic';
|
|
3
|
-
export interface PineconeSemanticMemoryOptions {
|
|
4
|
-
/** Pinecone API key. */
|
|
5
|
-
apiKey: string;
|
|
6
|
-
/** Pinecone index name. */
|
|
7
|
-
indexName: string;
|
|
8
|
-
/** Pinecone namespace. Default: 'default'. */
|
|
9
|
-
namespace?: string;
|
|
10
|
-
/** Embedding provider (embed function + dimension). */
|
|
11
|
-
embedding: EmbeddingAdapter;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Pinecone-backed SemanticMemory.
|
|
15
|
-
*
|
|
16
|
-
* Call `init()` before use to validate embedding dimension against Pinecone index.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* const memory = new PineconeSemanticMemory({
|
|
21
|
-
* apiKey: process.env.PINECONE_API_KEY!,
|
|
22
|
-
* indexName: 'my-index',
|
|
23
|
-
* embedding: openaiEmbedding({ apiKey: '...' }),
|
|
24
|
-
* });
|
|
25
|
-
* await memory.init();
|
|
26
|
-
* await memory.store('user likes coffee');
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export declare class PineconeSemanticMemory implements SemanticMemory {
|
|
30
|
-
private client;
|
|
31
|
-
private pcIndex;
|
|
32
|
-
private namespace;
|
|
33
|
-
private indexName;
|
|
34
|
-
private embedding;
|
|
35
|
-
private initialized;
|
|
36
|
-
constructor(options: PineconeSemanticMemoryOptions);
|
|
37
|
-
init(): Promise<void>;
|
|
38
|
-
private ensureInit;
|
|
39
|
-
private ns;
|
|
40
|
-
store(text: string, metadata?: Record<string, unknown>): Promise<string>;
|
|
41
|
-
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
42
|
-
delete(ids: string[]): Promise<void>;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=semantic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../../src/memory/pinecone/semantic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/E,MAAM,WAAW,6BAA6B;IAC5C,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAOD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,6BAA6B;IAO5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,EAAE;IAIJ,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,OAAO,CAAC,MAAM,CAAC;IAqBZ,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC;IA4BpB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3C"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { Pinecone } from '@pinecone-database/pinecone';
|
|
2
|
-
/**
|
|
3
|
-
* Pinecone-backed SemanticMemory.
|
|
4
|
-
*
|
|
5
|
-
* Call `init()` before use to validate embedding dimension against Pinecone index.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const memory = new PineconeSemanticMemory({
|
|
10
|
-
* apiKey: process.env.PINECONE_API_KEY!,
|
|
11
|
-
* indexName: 'my-index',
|
|
12
|
-
* embedding: openaiEmbedding({ apiKey: '...' }),
|
|
13
|
-
* });
|
|
14
|
-
* await memory.init();
|
|
15
|
-
* await memory.store('user likes coffee');
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export class PineconeSemanticMemory {
|
|
19
|
-
constructor(options) {
|
|
20
|
-
this.initialized = false;
|
|
21
|
-
this.client = new Pinecone({ apiKey: options.apiKey });
|
|
22
|
-
this.indexName = options.indexName;
|
|
23
|
-
this.namespace = options.namespace ?? 'default';
|
|
24
|
-
this.embedding = options.embedding;
|
|
25
|
-
}
|
|
26
|
-
async init() {
|
|
27
|
-
this.pcIndex = this.client.index(this.indexName);
|
|
28
|
-
const stats = await this.pcIndex.describeIndexStats();
|
|
29
|
-
if (stats.dimension && stats.dimension !== this.embedding.dimension) {
|
|
30
|
-
throw new Error(`Dimension mismatch: Pinecone index expects ${stats.dimension}d, ` +
|
|
31
|
-
`but embedding provider has ${this.embedding.dimension}d`);
|
|
32
|
-
}
|
|
33
|
-
this.initialized = true;
|
|
34
|
-
}
|
|
35
|
-
ensureInit() {
|
|
36
|
-
if (!this.initialized) {
|
|
37
|
-
throw new Error('PineconeSemanticMemory not initialized. Call init() first.');
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
ns() {
|
|
41
|
-
return this.pcIndex.namespace(this.namespace);
|
|
42
|
-
}
|
|
43
|
-
async store(text, metadata = {}) {
|
|
44
|
-
this.ensureInit();
|
|
45
|
-
const id = crypto.randomUUID();
|
|
46
|
-
const values = await this.embedding.embed(text);
|
|
47
|
-
const pineconeMetadata = {
|
|
48
|
-
text,
|
|
49
|
-
...Object.fromEntries(Object.entries(metadata).filter(([, v]) => typeof v === 'string' ||
|
|
50
|
-
typeof v === 'number' ||
|
|
51
|
-
typeof v === 'boolean' ||
|
|
52
|
-
Array.isArray(v))),
|
|
53
|
-
};
|
|
54
|
-
await this.ns().upsert([{ id, values, metadata: pineconeMetadata }]);
|
|
55
|
-
return id;
|
|
56
|
-
}
|
|
57
|
-
async search(query, options = {}) {
|
|
58
|
-
this.ensureInit();
|
|
59
|
-
const topK = options.topK ?? 5;
|
|
60
|
-
const threshold = options.scoreThreshold ?? 0;
|
|
61
|
-
const vector = await this.embedding.embed(query);
|
|
62
|
-
const filter = options.filter;
|
|
63
|
-
const hasFilter = filter && Object.keys(filter).length > 0;
|
|
64
|
-
const results = await this.ns().query({
|
|
65
|
-
vector,
|
|
66
|
-
topK,
|
|
67
|
-
filter: hasFilter ? filter : undefined,
|
|
68
|
-
includeMetadata: true,
|
|
69
|
-
});
|
|
70
|
-
const matchList = results.matches ?? [];
|
|
71
|
-
return matchList
|
|
72
|
-
.filter((m) => (m.score ?? 0) >= threshold)
|
|
73
|
-
.map((m) => ({
|
|
74
|
-
id: m.id,
|
|
75
|
-
text: m.metadata?.text ?? '',
|
|
76
|
-
score: m.score ?? 0,
|
|
77
|
-
metadata: m.metadata ?? {},
|
|
78
|
-
}));
|
|
79
|
-
}
|
|
80
|
-
async delete(ids) {
|
|
81
|
-
this.ensureInit();
|
|
82
|
-
if (ids.length > 0) {
|
|
83
|
-
await this.ns().deleteMany({ ids });
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/memory/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { SqliteMemoryAdapter } from './memory-adapter';
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
2
|
-
import type { MemoryAdapter, Episode, Reflection, RecallQuery, SemanticRecallOptions, EpisodePatch, CountQuery, EmbeddingAdapter } from '../types';
|
|
3
|
-
export interface SqliteMemoryAdapterOptions {
|
|
4
|
-
/** Path to SQLite database file, or ':memory:' for in-memory. */
|
|
5
|
-
dbPath: string;
|
|
6
|
-
/** Enable WAL mode for better concurrent reads. Default: true. */
|
|
7
|
-
walMode?: boolean;
|
|
8
|
-
/** Enable vector search. When absent, semanticRecall is not available. */
|
|
9
|
-
vector?: {
|
|
10
|
-
/** Embedding provider (embed function + dimension). */
|
|
11
|
-
embedding: EmbeddingAdapter;
|
|
12
|
-
/** sqlite-vec load function. Auto-imports if not provided. */
|
|
13
|
-
loadVec?: (db: Database.Database) => void;
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* SQLite-backed MemoryAdapter with optional vector search.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* // RDB only (no vector search)
|
|
22
|
-
* const adapter = new SqliteMemoryAdapter({ dbPath: './memory.db' });
|
|
23
|
-
* await adapter.init();
|
|
24
|
-
*
|
|
25
|
-
* // With vector search
|
|
26
|
-
* const adapter = new SqliteMemoryAdapter({
|
|
27
|
-
* dbPath: './memory.db',
|
|
28
|
-
* vector: {
|
|
29
|
-
* embedding: openaiEmbedding({ apiKey: '...' }),
|
|
30
|
-
* },
|
|
31
|
-
* });
|
|
32
|
-
* await adapter.init();
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export declare class SqliteMemoryAdapter implements MemoryAdapter {
|
|
36
|
-
private db;
|
|
37
|
-
private opts;
|
|
38
|
-
private vectorEnabled;
|
|
39
|
-
private stmts;
|
|
40
|
-
constructor(options: SqliteMemoryAdapterOptions);
|
|
41
|
-
/** Initialize the database and create tables. Must be called before use. */
|
|
42
|
-
init(): Promise<void>;
|
|
43
|
-
private prepareStatements;
|
|
44
|
-
saveEpisode(episode: Episode): Promise<void>;
|
|
45
|
-
recall(query: RecallQuery): Promise<Episode[]>;
|
|
46
|
-
saveReflection(reflection: Reflection): Promise<void>;
|
|
47
|
-
getReflections(sourceEntity?: string): Promise<Reflection[]>;
|
|
48
|
-
semanticRecall(query: string, options?: SemanticRecallOptions): Promise<Episode[]>;
|
|
49
|
-
getByIds(ids: string[]): Promise<Episode[]>;
|
|
50
|
-
countEpisodes(query: CountQuery): Promise<number>;
|
|
51
|
-
updateEpisode(id: string, patch: EpisodePatch): Promise<void>;
|
|
52
|
-
deleteEpisode(id: string): Promise<void>;
|
|
53
|
-
expireEpisodes(before: number, minImportance?: number): Promise<number>;
|
|
54
|
-
private indexEmbedding;
|
|
55
|
-
/** Close the database connection. */
|
|
56
|
-
close(): void;
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=memory-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory-adapter.d.ts","sourceRoot":"","sources":["../../../../src/memory/sqlite/memory-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EACP,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,0BAA0B;IACzC,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,MAAM,CAAC,EAAE;QACP,uDAAuD;QACvD,SAAS,EAAE,gBAAgB,CAAC;QAC5B,8DAA8D;QAC9D,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;KAC3C,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,KAAK,CAQX;gBAEU,OAAO,EAAE,0BAA0B;IAI/C,4EAA4E;IACtE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,OAAO,CAAC,iBAAiB;IAkCnB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B5C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAkC9C,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAU5D,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,OAAO,EAAE,CAAC;IAuCf,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAM3C,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBjD,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB7E,OAAO,CAAC,cAAc;IAYtB,qCAAqC;IACrC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
2
|
-
import { createSchema, createSchemaWithoutVec } from './schema';
|
|
3
|
-
/**
|
|
4
|
-
* SQLite-backed MemoryAdapter with optional vector search.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* // RDB only (no vector search)
|
|
9
|
-
* const adapter = new SqliteMemoryAdapter({ dbPath: './memory.db' });
|
|
10
|
-
* await adapter.init();
|
|
11
|
-
*
|
|
12
|
-
* // With vector search
|
|
13
|
-
* const adapter = new SqliteMemoryAdapter({
|
|
14
|
-
* dbPath: './memory.db',
|
|
15
|
-
* vector: {
|
|
16
|
-
* embedding: openaiEmbedding({ apiKey: '...' }),
|
|
17
|
-
* },
|
|
18
|
-
* });
|
|
19
|
-
* await adapter.init();
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
export class SqliteMemoryAdapter {
|
|
23
|
-
constructor(options) {
|
|
24
|
-
this.vectorEnabled = false;
|
|
25
|
-
this.opts = options;
|
|
26
|
-
}
|
|
27
|
-
/** Initialize the database and create tables. Must be called before use. */
|
|
28
|
-
async init() {
|
|
29
|
-
this.db = new Database(this.opts.dbPath);
|
|
30
|
-
if (this.opts.walMode !== false) {
|
|
31
|
-
this.db.pragma('journal_mode = WAL');
|
|
32
|
-
}
|
|
33
|
-
if (this.opts.vector) {
|
|
34
|
-
const dim = this.opts.vector.embedding.dimension;
|
|
35
|
-
if (this.opts.vector.loadVec) {
|
|
36
|
-
this.opts.vector.loadVec(this.db);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
const sqliteVec = await import('sqlite-vec');
|
|
40
|
-
sqliteVec.load(this.db);
|
|
41
|
-
}
|
|
42
|
-
this.db.exec(createSchema(dim));
|
|
43
|
-
this.vectorEnabled = true;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
this.db.exec(createSchemaWithoutVec());
|
|
47
|
-
}
|
|
48
|
-
this.prepareStatements();
|
|
49
|
-
}
|
|
50
|
-
prepareStatements() {
|
|
51
|
-
this.stmts = {
|
|
52
|
-
insertEpisode: this.db.prepare(`
|
|
53
|
-
INSERT OR REPLACE INTO episodes
|
|
54
|
-
(id, timestamp, source_entity, context, appraisal, emotion_v, emotion_a, emotion_d, intensity, importance)
|
|
55
|
-
VALUES
|
|
56
|
-
(@id, @timestamp, @sourceEntity, @context, @appraisal, @emotionV, @emotionA, @emotionD, @intensity, @importance)
|
|
57
|
-
`),
|
|
58
|
-
insertReflection: this.db.prepare(`
|
|
59
|
-
INSERT OR REPLACE INTO reflections
|
|
60
|
-
(id, timestamp, source_entity, content, trigger_type, emotion_v, emotion_a, emotion_d)
|
|
61
|
-
VALUES
|
|
62
|
-
(@id, @timestamp, @sourceEntity, @content, @triggerType, @emotionV, @emotionA, @emotionD)
|
|
63
|
-
`),
|
|
64
|
-
getReflections: this.db.prepare(`SELECT * FROM reflections WHERE source_entity = ? ORDER BY timestamp DESC LIMIT ?`),
|
|
65
|
-
getReflectionsAll: this.db.prepare(`SELECT * FROM reflections ORDER BY timestamp DESC LIMIT ?`),
|
|
66
|
-
getByIds: this.db.prepare(`SELECT * FROM episodes WHERE id IN (SELECT value FROM json_each(?))`),
|
|
67
|
-
updateEpisode: this.db.prepare(`
|
|
68
|
-
UPDATE episodes SET importance = @importance, intensity = @intensity,
|
|
69
|
-
emotion_v = @emotionV, emotion_a = @emotionA, emotion_d = @emotionD
|
|
70
|
-
WHERE id = @id
|
|
71
|
-
`),
|
|
72
|
-
deleteEpisode: this.db.prepare(`DELETE FROM episodes WHERE id = ?`),
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
// ── Required methods ──
|
|
76
|
-
async saveEpisode(episode) {
|
|
77
|
-
this.stmts.insertEpisode.run({
|
|
78
|
-
id: episode.id,
|
|
79
|
-
timestamp: episode.timestamp,
|
|
80
|
-
sourceEntity: episode.sourceEntity ?? null,
|
|
81
|
-
context: episode.context ?? null,
|
|
82
|
-
appraisal: JSON.stringify(episode.appraisal),
|
|
83
|
-
emotionV: episode.emotionSnapshot.V,
|
|
84
|
-
emotionA: episode.emotionSnapshot.A,
|
|
85
|
-
emotionD: episode.emotionSnapshot.D,
|
|
86
|
-
intensity: episode.intensity,
|
|
87
|
-
importance: episode.importance,
|
|
88
|
-
});
|
|
89
|
-
if (this.vectorEnabled && this.opts.vector) {
|
|
90
|
-
try {
|
|
91
|
-
const text = episode.context ?? episode.sourceEntity ?? '';
|
|
92
|
-
if (text) {
|
|
93
|
-
const embedding = await this.opts.vector.embedding.embed(text);
|
|
94
|
-
this.indexEmbedding(episode.id, embedding);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
// Best-effort: vector indexing failure doesn't block episode save.
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
async recall(query) {
|
|
103
|
-
const conditions = [];
|
|
104
|
-
const params = [];
|
|
105
|
-
if (query.sourceEntity) {
|
|
106
|
-
conditions.push('source_entity = ?');
|
|
107
|
-
params.push(query.sourceEntity);
|
|
108
|
-
}
|
|
109
|
-
if (query.context) {
|
|
110
|
-
conditions.push('context LIKE ?');
|
|
111
|
-
params.push(`%${query.context}%`);
|
|
112
|
-
}
|
|
113
|
-
if (query.minImportance !== undefined) {
|
|
114
|
-
conditions.push('importance >= ?');
|
|
115
|
-
params.push(query.minImportance);
|
|
116
|
-
}
|
|
117
|
-
if (query.timeRange) {
|
|
118
|
-
conditions.push('timestamp >= ? AND timestamp <= ?');
|
|
119
|
-
params.push(query.timeRange[0], query.timeRange[1]);
|
|
120
|
-
}
|
|
121
|
-
if (query.valenceRange) {
|
|
122
|
-
conditions.push('emotion_v >= ? AND emotion_v <= ?');
|
|
123
|
-
params.push(query.valenceRange[0], query.valenceRange[1]);
|
|
124
|
-
}
|
|
125
|
-
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
126
|
-
const limit = query.limit ?? 10;
|
|
127
|
-
params.push(limit);
|
|
128
|
-
const sql = `SELECT * FROM episodes ${where} ORDER BY timestamp DESC LIMIT ?`;
|
|
129
|
-
const rows = this.db.prepare(sql).all(...params);
|
|
130
|
-
return rows.map(rowToEpisode);
|
|
131
|
-
}
|
|
132
|
-
async saveReflection(reflection) {
|
|
133
|
-
this.stmts.insertReflection.run({
|
|
134
|
-
id: reflection.id,
|
|
135
|
-
timestamp: reflection.timestamp,
|
|
136
|
-
sourceEntity: reflection.sourceEntity ?? null,
|
|
137
|
-
content: reflection.content,
|
|
138
|
-
triggerType: reflection.trigger,
|
|
139
|
-
emotionV: reflection.emotionSnapshot.V,
|
|
140
|
-
emotionA: reflection.emotionSnapshot.A,
|
|
141
|
-
emotionD: reflection.emotionSnapshot.D,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
async getReflections(sourceEntity) {
|
|
145
|
-
const maxRows = 100;
|
|
146
|
-
const rows = sourceEntity
|
|
147
|
-
? this.stmts.getReflections.all(sourceEntity, maxRows)
|
|
148
|
-
: this.stmts.getReflectionsAll.all(maxRows);
|
|
149
|
-
return rows.map(rowToReflection);
|
|
150
|
-
}
|
|
151
|
-
// ── Optional methods ──
|
|
152
|
-
async semanticRecall(query, options) {
|
|
153
|
-
if (!this.vectorEnabled || !this.opts.vector || !this.db.open) {
|
|
154
|
-
return this.recall({ context: query, limit: options?.topK ?? 10 });
|
|
155
|
-
}
|
|
156
|
-
const embedding = await this.opts.vector.embedding.embed(query);
|
|
157
|
-
const topK = options?.topK ?? 5;
|
|
158
|
-
const hasFilter = options?.filter?.sourceEntity || options?.filter?.minImportance !== undefined;
|
|
159
|
-
const fetchK = hasFilter ? topK * 4 : topK;
|
|
160
|
-
const vec = new Float32Array(embedding);
|
|
161
|
-
const vecRows = this.db.prepare(`SELECT id, distance FROM embeddings WHERE embedding MATCH ? ORDER BY distance LIMIT ?`).all(vec, fetchK);
|
|
162
|
-
if (vecRows.length === 0)
|
|
163
|
-
return [];
|
|
164
|
-
const ids = vecRows.map(r => r.id);
|
|
165
|
-
const distMap = new Map(vecRows.map(r => [r.id, r.distance]));
|
|
166
|
-
let sql = `SELECT * FROM episodes WHERE id IN (${ids.map(() => '?').join(',')})`;
|
|
167
|
-
const params = [...ids];
|
|
168
|
-
if (options?.filter?.sourceEntity) {
|
|
169
|
-
sql += ` AND source_entity = ?`;
|
|
170
|
-
params.push(options.filter.sourceEntity);
|
|
171
|
-
}
|
|
172
|
-
if (options?.filter?.minImportance !== undefined) {
|
|
173
|
-
sql += ` AND importance >= ?`;
|
|
174
|
-
params.push(options.filter.minImportance);
|
|
175
|
-
}
|
|
176
|
-
const rows = this.db.prepare(sql).all(...params);
|
|
177
|
-
return rows
|
|
178
|
-
.map(row => rowToEpisode(row))
|
|
179
|
-
.sort((a, b) => (distMap.get(a.id) ?? 1) - (distMap.get(b.id) ?? 1))
|
|
180
|
-
.slice(0, topK);
|
|
181
|
-
}
|
|
182
|
-
async getByIds(ids) {
|
|
183
|
-
if (ids.length === 0)
|
|
184
|
-
return [];
|
|
185
|
-
const rows = this.stmts.getByIds.all(JSON.stringify(ids));
|
|
186
|
-
return rows.map(rowToEpisode);
|
|
187
|
-
}
|
|
188
|
-
async countEpisodes(query) {
|
|
189
|
-
const conditions = [];
|
|
190
|
-
const params = [];
|
|
191
|
-
if (query.sourceEntity) {
|
|
192
|
-
conditions.push('source_entity = ?');
|
|
193
|
-
params.push(query.sourceEntity);
|
|
194
|
-
}
|
|
195
|
-
if (query.context) {
|
|
196
|
-
conditions.push('context LIKE ?');
|
|
197
|
-
params.push(`%${query.context}%`);
|
|
198
|
-
}
|
|
199
|
-
if (query.timeRange) {
|
|
200
|
-
conditions.push('timestamp >= ? AND timestamp <= ?');
|
|
201
|
-
params.push(query.timeRange[0], query.timeRange[1]);
|
|
202
|
-
}
|
|
203
|
-
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
204
|
-
const sql = `SELECT COUNT(*) as cnt FROM episodes ${where}`;
|
|
205
|
-
const row = this.db.prepare(sql).get(...params);
|
|
206
|
-
return row.cnt;
|
|
207
|
-
}
|
|
208
|
-
async updateEpisode(id, patch) {
|
|
209
|
-
const existing = this.stmts.getByIds.all(JSON.stringify([id]));
|
|
210
|
-
if (existing.length === 0)
|
|
211
|
-
return;
|
|
212
|
-
const row = existing[0];
|
|
213
|
-
this.stmts.updateEpisode.run({
|
|
214
|
-
id,
|
|
215
|
-
importance: patch.importance ?? row.importance,
|
|
216
|
-
intensity: patch.intensity ?? row.intensity,
|
|
217
|
-
emotionV: patch.emotionSnapshot?.V ?? row.emotion_v,
|
|
218
|
-
emotionA: patch.emotionSnapshot?.A ?? row.emotion_a,
|
|
219
|
-
emotionD: patch.emotionSnapshot?.D ?? row.emotion_d,
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
async deleteEpisode(id) {
|
|
223
|
-
this.stmts.deleteEpisode.run(id);
|
|
224
|
-
if (this.vectorEnabled) {
|
|
225
|
-
try {
|
|
226
|
-
this.db.prepare(`DELETE FROM embeddings WHERE id = ?`).run(id);
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
// Best-effort: vector cleanup failure is non-fatal.
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
async expireEpisodes(before, minImportance) {
|
|
234
|
-
const threshold = minImportance ?? 0;
|
|
235
|
-
const result = this.db.prepare(`DELETE FROM episodes WHERE timestamp < ? AND importance < ?`).run(before, threshold);
|
|
236
|
-
if (this.vectorEnabled) {
|
|
237
|
-
try {
|
|
238
|
-
this.db.prepare(`DELETE FROM embeddings WHERE id NOT IN (SELECT id FROM episodes)`).run();
|
|
239
|
-
}
|
|
240
|
-
catch {
|
|
241
|
-
// Best-effort cleanup.
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
return result.changes;
|
|
245
|
-
}
|
|
246
|
-
// ── Utility ──
|
|
247
|
-
indexEmbedding(id, embedding) {
|
|
248
|
-
if (!this.db.open)
|
|
249
|
-
return;
|
|
250
|
-
try {
|
|
251
|
-
const vec = new Float32Array(embedding);
|
|
252
|
-
const exists = this.db.prepare(`SELECT 1 FROM embeddings WHERE id = ?`).get(id);
|
|
253
|
-
if (exists)
|
|
254
|
-
return;
|
|
255
|
-
this.db.prepare(`INSERT INTO embeddings (id, embedding) VALUES (?, ?)`).run(id, vec);
|
|
256
|
-
}
|
|
257
|
-
catch {
|
|
258
|
-
// Silently ignore.
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
/** Close the database connection. */
|
|
262
|
-
close() {
|
|
263
|
-
this.db.close();
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
// ── Row mappers ──
|
|
267
|
-
function rowToEpisode(row) {
|
|
268
|
-
return {
|
|
269
|
-
id: row.id,
|
|
270
|
-
timestamp: row.timestamp,
|
|
271
|
-
sourceEntity: row.source_entity ?? undefined,
|
|
272
|
-
context: row.context ?? undefined,
|
|
273
|
-
appraisal: JSON.parse(row.appraisal),
|
|
274
|
-
emotionSnapshot: {
|
|
275
|
-
V: row.emotion_v,
|
|
276
|
-
A: row.emotion_a,
|
|
277
|
-
D: row.emotion_d,
|
|
278
|
-
},
|
|
279
|
-
intensity: row.intensity,
|
|
280
|
-
importance: row.importance,
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
function rowToReflection(row) {
|
|
284
|
-
return {
|
|
285
|
-
id: row.id,
|
|
286
|
-
timestamp: row.timestamp,
|
|
287
|
-
sourceEntity: row.source_entity ?? undefined,
|
|
288
|
-
content: row.content,
|
|
289
|
-
trigger: row.trigger_type,
|
|
290
|
-
emotionSnapshot: {
|
|
291
|
-
V: row.emotion_v,
|
|
292
|
-
A: row.emotion_a,
|
|
293
|
-
D: row.emotion_d,
|
|
294
|
-
},
|
|
295
|
-
};
|
|
296
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/memory/sqlite/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CA4CzD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAuC/C"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
export const SCHEMA_VERSION = 2;
|
|
2
|
-
export function createSchema(embeddingDim) {
|
|
3
|
-
return `
|
|
4
|
-
CREATE TABLE IF NOT EXISTS _meta (
|
|
5
|
-
key TEXT PRIMARY KEY,
|
|
6
|
-
value TEXT NOT NULL
|
|
7
|
-
);
|
|
8
|
-
|
|
9
|
-
INSERT OR IGNORE INTO _meta (key, value) VALUES ('schema_version', '${SCHEMA_VERSION}');
|
|
10
|
-
|
|
11
|
-
CREATE TABLE IF NOT EXISTS episodes (
|
|
12
|
-
id TEXT PRIMARY KEY,
|
|
13
|
-
timestamp INTEGER NOT NULL,
|
|
14
|
-
source_entity TEXT,
|
|
15
|
-
context TEXT,
|
|
16
|
-
appraisal TEXT NOT NULL,
|
|
17
|
-
emotion_v REAL NOT NULL,
|
|
18
|
-
emotion_a REAL NOT NULL,
|
|
19
|
-
emotion_d REAL NOT NULL,
|
|
20
|
-
intensity REAL NOT NULL,
|
|
21
|
-
importance REAL NOT NULL
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_source ON episodes(source_entity);
|
|
25
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_timestamp ON episodes(timestamp DESC);
|
|
26
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_importance ON episodes(importance);
|
|
27
|
-
|
|
28
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS embeddings USING vec0(
|
|
29
|
-
id TEXT PRIMARY KEY,
|
|
30
|
-
embedding FLOAT[${embeddingDim}]
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
CREATE TABLE IF NOT EXISTS reflections (
|
|
34
|
-
id TEXT PRIMARY KEY,
|
|
35
|
-
timestamp INTEGER NOT NULL,
|
|
36
|
-
source_entity TEXT,
|
|
37
|
-
content TEXT NOT NULL,
|
|
38
|
-
trigger_type TEXT NOT NULL,
|
|
39
|
-
emotion_v REAL NOT NULL,
|
|
40
|
-
emotion_a REAL NOT NULL,
|
|
41
|
-
emotion_d REAL NOT NULL
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
CREATE INDEX IF NOT EXISTS idx_reflections_source ON reflections(source_entity);
|
|
45
|
-
`;
|
|
46
|
-
}
|
|
47
|
-
export function createSchemaWithoutVec() {
|
|
48
|
-
return `
|
|
49
|
-
CREATE TABLE IF NOT EXISTS _meta (
|
|
50
|
-
key TEXT PRIMARY KEY,
|
|
51
|
-
value TEXT NOT NULL
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
INSERT OR IGNORE INTO _meta (key, value) VALUES ('schema_version', '${SCHEMA_VERSION}');
|
|
55
|
-
|
|
56
|
-
CREATE TABLE IF NOT EXISTS episodes (
|
|
57
|
-
id TEXT PRIMARY KEY,
|
|
58
|
-
timestamp INTEGER NOT NULL,
|
|
59
|
-
source_entity TEXT,
|
|
60
|
-
context TEXT,
|
|
61
|
-
appraisal TEXT NOT NULL,
|
|
62
|
-
emotion_v REAL NOT NULL,
|
|
63
|
-
emotion_a REAL NOT NULL,
|
|
64
|
-
emotion_d REAL NOT NULL,
|
|
65
|
-
intensity REAL NOT NULL,
|
|
66
|
-
importance REAL NOT NULL
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_source ON episodes(source_entity);
|
|
70
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_timestamp ON episodes(timestamp DESC);
|
|
71
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_importance ON episodes(importance);
|
|
72
|
-
|
|
73
|
-
CREATE TABLE IF NOT EXISTS reflections (
|
|
74
|
-
id TEXT PRIMARY KEY,
|
|
75
|
-
timestamp INTEGER NOT NULL,
|
|
76
|
-
source_entity TEXT,
|
|
77
|
-
content TEXT NOT NULL,
|
|
78
|
-
trigger_type TEXT NOT NULL,
|
|
79
|
-
emotion_v REAL NOT NULL,
|
|
80
|
-
emotion_a REAL NOT NULL,
|
|
81
|
-
emotion_d REAL NOT NULL
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
CREATE INDEX IF NOT EXISTS idx_reflections_source ON reflections(source_entity);
|
|
85
|
-
`;
|
|
86
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { SupabaseSemanticMemory } from './semantic';
|
|
2
|
-
export type { SupabaseSemanticMemoryOptions } from './semantic';
|
|
3
|
-
/** @deprecated Use SupabaseSemanticMemory */
|
|
4
|
-
export { SupabaseMemoryAdapter } from './memory-adapter';
|
|
5
|
-
/** @deprecated Use SupabaseSemanticMemoryOptions */
|
|
6
|
-
export type { SupabaseMemoryAdapterOptions } from './memory-adapter';
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/memory/supabase/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEhE,6CAA6C;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,oDAAoD;AACpD,YAAY,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC"}
|