@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,335 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SupabaseMemoryAdapter = void 0;
|
|
4
|
-
const supabase_js_1 = require("@supabase/supabase-js");
|
|
5
|
-
/**
|
|
6
|
-
* Supabase-backed MemoryAdapter with optional pgvector semantic search.
|
|
7
|
-
*
|
|
8
|
-
* Combines episode/reflection RDB storage with optional pgvector embeddings
|
|
9
|
-
* into a single unified MemoryAdapter interface.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* // RDB only (no vector search)
|
|
14
|
-
* const adapter = new SupabaseMemoryAdapter({
|
|
15
|
-
* supabaseUrl: process.env.SUPABASE_URL!,
|
|
16
|
-
* supabaseKey: process.env.SUPABASE_KEY!,
|
|
17
|
-
* personaId: 'world-123',
|
|
18
|
-
* });
|
|
19
|
-
*
|
|
20
|
-
* // With vector search
|
|
21
|
-
* const adapter = new SupabaseMemoryAdapter({
|
|
22
|
-
* supabaseUrl: process.env.SUPABASE_URL!,
|
|
23
|
-
* supabaseKey: process.env.SUPABASE_KEY!,
|
|
24
|
-
* personaId: 'world-123',
|
|
25
|
-
* vector: {
|
|
26
|
-
* embedding: openaiEmbedding({ apiKey: '...' }),
|
|
27
|
-
* matchThreshold: 0.75,
|
|
28
|
-
* },
|
|
29
|
-
* });
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
class SupabaseMemoryAdapter {
|
|
33
|
-
constructor(options) {
|
|
34
|
-
this.client = (0, supabase_js_1.createClient)(options.supabaseUrl, options.supabaseKey);
|
|
35
|
-
this.personaId = options.personaId;
|
|
36
|
-
this.rlsStrategy = options.rlsStrategy ?? 'application';
|
|
37
|
-
this.vectorEnabled = !!options.vector;
|
|
38
|
-
this.embedding = options.vector?.embedding;
|
|
39
|
-
this.matchThreshold = options.vector?.matchThreshold ?? 0.7;
|
|
40
|
-
}
|
|
41
|
-
async setPersonaContext() {
|
|
42
|
-
if (this.rlsStrategy === 'application') {
|
|
43
|
-
await this.client
|
|
44
|
-
.rpc('set_config', {
|
|
45
|
-
setting: 'app.current_persona_id',
|
|
46
|
-
value: this.personaId,
|
|
47
|
-
})
|
|
48
|
-
.throwOnError();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// ── Required methods ──
|
|
52
|
-
async saveEpisode(episode) {
|
|
53
|
-
await this.setPersonaContext();
|
|
54
|
-
const { error } = await this.client.from('episodes').upsert({
|
|
55
|
-
id: episode.id,
|
|
56
|
-
persona_id: this.personaId,
|
|
57
|
-
source_entity: episode.sourceEntity ?? null,
|
|
58
|
-
context: episode.context ?? null,
|
|
59
|
-
timestamp: episode.timestamp,
|
|
60
|
-
importance: episode.importance,
|
|
61
|
-
intensity: episode.intensity,
|
|
62
|
-
vad_v: episode.emotionSnapshot.V,
|
|
63
|
-
vad_a: episode.emotionSnapshot.A,
|
|
64
|
-
vad_d: episode.emotionSnapshot.D,
|
|
65
|
-
appraisal: episode.appraisal,
|
|
66
|
-
});
|
|
67
|
-
if (error)
|
|
68
|
-
throw new Error(`saveEpisode failed: ${error.message}`);
|
|
69
|
-
// Auto-index embedding when vector is enabled
|
|
70
|
-
if (this.vectorEnabled && this.embedding) {
|
|
71
|
-
try {
|
|
72
|
-
const text = episode.context ?? episode.sourceEntity ?? '';
|
|
73
|
-
if (text) {
|
|
74
|
-
const embedding = await this.embedding.embed(text);
|
|
75
|
-
await this.indexEmbedding(episode.id, embedding, {
|
|
76
|
-
type: 'episode',
|
|
77
|
-
sourceEntity: episode.sourceEntity,
|
|
78
|
-
timestamp: episode.timestamp,
|
|
79
|
-
importance: episode.importance,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// Best-effort: vector indexing failure doesn't block episode save.
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
async recall(query) {
|
|
89
|
-
await this.setPersonaContext();
|
|
90
|
-
const limit = query.limit ?? 10;
|
|
91
|
-
let q = this.client
|
|
92
|
-
.from('episodes')
|
|
93
|
-
.select('*')
|
|
94
|
-
.eq('persona_id', this.personaId);
|
|
95
|
-
if (query.sourceEntity)
|
|
96
|
-
q = q.eq('source_entity', query.sourceEntity);
|
|
97
|
-
if (query.context)
|
|
98
|
-
q = q.ilike('context', `%${query.context}%`);
|
|
99
|
-
if (query.minImportance !== undefined)
|
|
100
|
-
q = q.gte('importance', query.minImportance);
|
|
101
|
-
if (query.valenceRange) {
|
|
102
|
-
q = q
|
|
103
|
-
.gte('vad_v', query.valenceRange[0])
|
|
104
|
-
.lte('vad_v', query.valenceRange[1]);
|
|
105
|
-
}
|
|
106
|
-
if (query.timeRange) {
|
|
107
|
-
q = q
|
|
108
|
-
.gte('timestamp', query.timeRange[0])
|
|
109
|
-
.lte('timestamp', query.timeRange[1]);
|
|
110
|
-
}
|
|
111
|
-
const { data, error } = await q
|
|
112
|
-
.order('timestamp', { ascending: false })
|
|
113
|
-
.limit(limit);
|
|
114
|
-
if (error)
|
|
115
|
-
throw new Error(`recall failed: ${error.message}`);
|
|
116
|
-
return (data ?? []).map(rowToEpisode);
|
|
117
|
-
}
|
|
118
|
-
async saveReflection(reflection) {
|
|
119
|
-
await this.setPersonaContext();
|
|
120
|
-
const { error } = await this.client.from('reflections').upsert({
|
|
121
|
-
id: reflection.id,
|
|
122
|
-
persona_id: this.personaId,
|
|
123
|
-
source_entity: reflection.sourceEntity ?? null,
|
|
124
|
-
content: reflection.content,
|
|
125
|
-
trigger: reflection.trigger,
|
|
126
|
-
timestamp: reflection.timestamp,
|
|
127
|
-
vad_v: reflection.emotionSnapshot.V,
|
|
128
|
-
vad_a: reflection.emotionSnapshot.A,
|
|
129
|
-
vad_d: reflection.emotionSnapshot.D,
|
|
130
|
-
});
|
|
131
|
-
if (error)
|
|
132
|
-
throw new Error(`saveReflection failed: ${error.message}`);
|
|
133
|
-
}
|
|
134
|
-
async getReflections(sourceEntity) {
|
|
135
|
-
await this.setPersonaContext();
|
|
136
|
-
const maxRows = 100;
|
|
137
|
-
let q = this.client
|
|
138
|
-
.from('reflections')
|
|
139
|
-
.select('*')
|
|
140
|
-
.eq('persona_id', this.personaId)
|
|
141
|
-
.order('timestamp', { ascending: false });
|
|
142
|
-
if (sourceEntity)
|
|
143
|
-
q = q.eq('source_entity', sourceEntity);
|
|
144
|
-
const { data, error } = await q.limit(maxRows);
|
|
145
|
-
if (error)
|
|
146
|
-
throw new Error(`getReflections failed: ${error.message}`);
|
|
147
|
-
return (data ?? []).map(rowToReflection);
|
|
148
|
-
}
|
|
149
|
-
// ── Optional methods ──
|
|
150
|
-
async semanticRecall(query, options) {
|
|
151
|
-
if (!this.vectorEnabled || !this.embedding) {
|
|
152
|
-
// Fallback to text-based recall
|
|
153
|
-
return this.recall({ context: query, limit: options?.topK ?? 10 });
|
|
154
|
-
}
|
|
155
|
-
await this.setPersonaContext();
|
|
156
|
-
const embedding = await this.embedding.embed(query);
|
|
157
|
-
const topK = options?.topK ?? 5;
|
|
158
|
-
const { data, error } = await this.client.rpc('match_embeddings', {
|
|
159
|
-
query_embedding: embedding,
|
|
160
|
-
match_threshold: this.matchThreshold,
|
|
161
|
-
match_count: topK,
|
|
162
|
-
filter_persona_id: this.personaId,
|
|
163
|
-
filter_type: 'episode',
|
|
164
|
-
filter_source_entity: options?.filter?.sourceEntity ?? null,
|
|
165
|
-
filter_min_importance: options?.filter?.minImportance ?? null,
|
|
166
|
-
});
|
|
167
|
-
if (error)
|
|
168
|
-
throw new Error(`semanticRecall failed: ${error.message}`);
|
|
169
|
-
const matchedIds = (data ?? []).map((row) => row.id);
|
|
170
|
-
if (matchedIds.length === 0)
|
|
171
|
-
return [];
|
|
172
|
-
// Fetch full episodes for matched IDs
|
|
173
|
-
return this.getByIds(matchedIds);
|
|
174
|
-
}
|
|
175
|
-
async getByIds(ids) {
|
|
176
|
-
if (ids.length === 0)
|
|
177
|
-
return [];
|
|
178
|
-
await this.setPersonaContext();
|
|
179
|
-
const { data, error } = await this.client
|
|
180
|
-
.from('episodes')
|
|
181
|
-
.select('*')
|
|
182
|
-
.eq('persona_id', this.personaId)
|
|
183
|
-
.in('id', ids);
|
|
184
|
-
if (error)
|
|
185
|
-
throw new Error(`getByIds failed: ${error.message}`);
|
|
186
|
-
return (data ?? []).map(rowToEpisode);
|
|
187
|
-
}
|
|
188
|
-
async countEpisodes(query) {
|
|
189
|
-
await this.setPersonaContext();
|
|
190
|
-
let q = this.client
|
|
191
|
-
.from('episodes')
|
|
192
|
-
.select('*', { count: 'exact', head: true })
|
|
193
|
-
.eq('persona_id', this.personaId);
|
|
194
|
-
if (query.sourceEntity)
|
|
195
|
-
q = q.eq('source_entity', query.sourceEntity);
|
|
196
|
-
if (query.context)
|
|
197
|
-
q = q.ilike('context', `%${query.context}%`);
|
|
198
|
-
if (query.timeRange) {
|
|
199
|
-
q = q
|
|
200
|
-
.gte('timestamp', query.timeRange[0])
|
|
201
|
-
.lte('timestamp', query.timeRange[1]);
|
|
202
|
-
}
|
|
203
|
-
const { count, error } = await q;
|
|
204
|
-
if (error)
|
|
205
|
-
throw new Error(`countEpisodes failed: ${error.message}`);
|
|
206
|
-
return count ?? 0;
|
|
207
|
-
}
|
|
208
|
-
async updateEpisode(id, patch) {
|
|
209
|
-
await this.setPersonaContext();
|
|
210
|
-
const updates = {};
|
|
211
|
-
if (patch.importance !== undefined)
|
|
212
|
-
updates.importance = patch.importance;
|
|
213
|
-
if (patch.intensity !== undefined)
|
|
214
|
-
updates.intensity = patch.intensity;
|
|
215
|
-
if (patch.emotionSnapshot !== undefined) {
|
|
216
|
-
updates.vad_v = patch.emotionSnapshot.V;
|
|
217
|
-
updates.vad_a = patch.emotionSnapshot.A;
|
|
218
|
-
updates.vad_d = patch.emotionSnapshot.D;
|
|
219
|
-
}
|
|
220
|
-
if (Object.keys(updates).length === 0)
|
|
221
|
-
return;
|
|
222
|
-
const { error } = await this.client
|
|
223
|
-
.from('episodes')
|
|
224
|
-
.update(updates)
|
|
225
|
-
.eq('id', id)
|
|
226
|
-
.eq('persona_id', this.personaId);
|
|
227
|
-
if (error)
|
|
228
|
-
throw new Error(`updateEpisode failed: ${error.message}`);
|
|
229
|
-
}
|
|
230
|
-
async deleteEpisode(id) {
|
|
231
|
-
await this.setPersonaContext();
|
|
232
|
-
const { error } = await this.client
|
|
233
|
-
.from('episodes')
|
|
234
|
-
.delete()
|
|
235
|
-
.eq('id', id)
|
|
236
|
-
.eq('persona_id', this.personaId);
|
|
237
|
-
if (error)
|
|
238
|
-
throw new Error(`deleteEpisode failed: ${error.message}`);
|
|
239
|
-
// Best-effort: clean up embedding
|
|
240
|
-
if (this.vectorEnabled) {
|
|
241
|
-
try {
|
|
242
|
-
await this.client
|
|
243
|
-
.from('memory_embeddings')
|
|
244
|
-
.delete()
|
|
245
|
-
.eq('id', id)
|
|
246
|
-
.eq('persona_id', this.personaId);
|
|
247
|
-
}
|
|
248
|
-
catch {
|
|
249
|
-
// Non-fatal: vector cleanup failure is acceptable.
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
async expireEpisodes(before, minImportance) {
|
|
254
|
-
await this.setPersonaContext();
|
|
255
|
-
const threshold = minImportance ?? 0;
|
|
256
|
-
// Count first, then delete (Supabase delete doesn't return count reliably)
|
|
257
|
-
const { count, error: countErr } = await this.client
|
|
258
|
-
.from('episodes')
|
|
259
|
-
.select('*', { count: 'exact', head: true })
|
|
260
|
-
.eq('persona_id', this.personaId)
|
|
261
|
-
.lt('timestamp', before)
|
|
262
|
-
.lt('importance', threshold);
|
|
263
|
-
if (countErr)
|
|
264
|
-
throw new Error(`expireEpisodes count failed: ${countErr.message}`);
|
|
265
|
-
const expired = count ?? 0;
|
|
266
|
-
if (expired === 0)
|
|
267
|
-
return 0;
|
|
268
|
-
const { error } = await this.client
|
|
269
|
-
.from('episodes')
|
|
270
|
-
.delete()
|
|
271
|
-
.eq('persona_id', this.personaId)
|
|
272
|
-
.lt('timestamp', before)
|
|
273
|
-
.lt('importance', threshold);
|
|
274
|
-
if (error)
|
|
275
|
-
throw new Error(`expireEpisodes failed: ${error.message}`);
|
|
276
|
-
// Best-effort: clean up orphaned embeddings
|
|
277
|
-
if (this.vectorEnabled) {
|
|
278
|
-
try {
|
|
279
|
-
await this.client.rpc('cleanup_orphaned_embeddings', {
|
|
280
|
-
filter_persona_id: this.personaId,
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
catch {
|
|
284
|
-
// Non-fatal: orphan cleanup failure is acceptable.
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
return expired;
|
|
288
|
-
}
|
|
289
|
-
// ── Utility ──
|
|
290
|
-
async indexEmbedding(id, embedding, metadata) {
|
|
291
|
-
const { error } = await this.client.from('memory_embeddings').upsert({
|
|
292
|
-
id,
|
|
293
|
-
persona_id: this.personaId,
|
|
294
|
-
type: metadata.type,
|
|
295
|
-
source_entity: metadata.sourceEntity ?? null,
|
|
296
|
-
timestamp: metadata.timestamp,
|
|
297
|
-
importance: metadata.importance ?? 0,
|
|
298
|
-
embedding,
|
|
299
|
-
});
|
|
300
|
-
if (error)
|
|
301
|
-
throw new Error(`indexEmbedding failed: ${error.message}`);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
exports.SupabaseMemoryAdapter = SupabaseMemoryAdapter;
|
|
305
|
-
// ── Row mappers ──
|
|
306
|
-
function rowToEpisode(row) {
|
|
307
|
-
return {
|
|
308
|
-
id: row.id,
|
|
309
|
-
timestamp: row.timestamp,
|
|
310
|
-
sourceEntity: row.source_entity || undefined,
|
|
311
|
-
context: row.context || undefined,
|
|
312
|
-
appraisal: row.appraisal,
|
|
313
|
-
emotionSnapshot: {
|
|
314
|
-
V: row.vad_v,
|
|
315
|
-
A: row.vad_a,
|
|
316
|
-
D: row.vad_d,
|
|
317
|
-
},
|
|
318
|
-
intensity: row.intensity,
|
|
319
|
-
importance: row.importance,
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
function rowToReflection(row) {
|
|
323
|
-
return {
|
|
324
|
-
id: row.id,
|
|
325
|
-
timestamp: row.timestamp,
|
|
326
|
-
sourceEntity: row.source_entity || undefined,
|
|
327
|
-
content: row.content,
|
|
328
|
-
trigger: row.trigger,
|
|
329
|
-
emotionSnapshot: {
|
|
330
|
-
V: row.vad_v,
|
|
331
|
-
A: row.vad_a,
|
|
332
|
-
D: row.vad_d,
|
|
333
|
-
},
|
|
334
|
-
};
|
|
335
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { EmbeddingAdapter } from '../types';
|
|
2
|
-
import type { SemanticMemory, SearchOptions, SearchResult } from '../semantic';
|
|
3
|
-
export interface SupabaseSemanticMemoryOptions {
|
|
4
|
-
/** Supabase project URL. */
|
|
5
|
-
supabaseUrl: string;
|
|
6
|
-
/** Supabase anon or service-role key. */
|
|
7
|
-
supabaseKey: string;
|
|
8
|
-
/** Embedding provider (embed function + dimension). */
|
|
9
|
-
embedding: EmbeddingAdapter;
|
|
10
|
-
/** Match threshold for pgvector similarity. Default: 0.7. */
|
|
11
|
-
matchThreshold?: number;
|
|
12
|
-
/** Table name for embeddings. Default: 'memory_embeddings'. */
|
|
13
|
-
tableName?: string;
|
|
14
|
-
/** RPC function name for similarity search. Default: 'match_semantic_memory'. */
|
|
15
|
-
matchFunction?: string;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Supabase pgvector-backed SemanticMemory.
|
|
19
|
-
*
|
|
20
|
-
* Requires a table with columns: id (text PK), text (text), embedding (vector),
|
|
21
|
-
* metadata (jsonb), and an RPC function for similarity search.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* const memory = new SupabaseSemanticMemory({
|
|
26
|
-
* supabaseUrl: process.env.SUPABASE_URL!,
|
|
27
|
-
* supabaseKey: process.env.SUPABASE_KEY!,
|
|
28
|
-
* embedding: openaiEmbedding({ apiKey: '...' }),
|
|
29
|
-
* });
|
|
30
|
-
* await memory.store('user likes coffee', { userId: '123' });
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
export declare class SupabaseSemanticMemory implements SemanticMemory {
|
|
34
|
-
private client;
|
|
35
|
-
private embedding;
|
|
36
|
-
private matchThreshold;
|
|
37
|
-
private tableName;
|
|
38
|
-
private matchFunction;
|
|
39
|
-
constructor(options: SupabaseSemanticMemoryOptions);
|
|
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/supabase/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,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,SAAS,EAAE,gBAAgB,CAAC;IAC5B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,EAAE,6BAA6B;IAQ5C,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,OAAO,CAAC,MAAM,CAAC;IAcZ,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC;IAwBpB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ3C"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SupabaseSemanticMemory = void 0;
|
|
4
|
-
const supabase_js_1 = require("@supabase/supabase-js");
|
|
5
|
-
/**
|
|
6
|
-
* Supabase pgvector-backed SemanticMemory.
|
|
7
|
-
*
|
|
8
|
-
* Requires a table with columns: id (text PK), text (text), embedding (vector),
|
|
9
|
-
* metadata (jsonb), and an RPC function for similarity search.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* const memory = new SupabaseSemanticMemory({
|
|
14
|
-
* supabaseUrl: process.env.SUPABASE_URL!,
|
|
15
|
-
* supabaseKey: process.env.SUPABASE_KEY!,
|
|
16
|
-
* embedding: openaiEmbedding({ apiKey: '...' }),
|
|
17
|
-
* });
|
|
18
|
-
* await memory.store('user likes coffee', { userId: '123' });
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
class SupabaseSemanticMemory {
|
|
22
|
-
constructor(options) {
|
|
23
|
-
this.client = (0, supabase_js_1.createClient)(options.supabaseUrl, options.supabaseKey);
|
|
24
|
-
this.embedding = options.embedding;
|
|
25
|
-
this.matchThreshold = options.matchThreshold ?? 0.7;
|
|
26
|
-
this.tableName = options.tableName ?? 'memory_embeddings';
|
|
27
|
-
this.matchFunction = options.matchFunction ?? 'match_semantic_memory';
|
|
28
|
-
}
|
|
29
|
-
async store(text, metadata = {}) {
|
|
30
|
-
const id = crypto.randomUUID();
|
|
31
|
-
const vector = await this.embedding.embed(text);
|
|
32
|
-
const { error } = await this.client.from(this.tableName).upsert({
|
|
33
|
-
id,
|
|
34
|
-
text,
|
|
35
|
-
embedding: vector,
|
|
36
|
-
metadata,
|
|
37
|
-
});
|
|
38
|
-
if (error)
|
|
39
|
-
throw new Error(`store failed: ${error.message}`);
|
|
40
|
-
return id;
|
|
41
|
-
}
|
|
42
|
-
async search(query, options = {}) {
|
|
43
|
-
const topK = options.topK ?? 5;
|
|
44
|
-
const threshold = options.scoreThreshold ?? this.matchThreshold;
|
|
45
|
-
const vector = await this.embedding.embed(query);
|
|
46
|
-
const { data, error } = await this.client.rpc(this.matchFunction, {
|
|
47
|
-
query_embedding: vector,
|
|
48
|
-
match_threshold: threshold,
|
|
49
|
-
match_count: topK,
|
|
50
|
-
filter_metadata: options.filter ?? null,
|
|
51
|
-
});
|
|
52
|
-
if (error)
|
|
53
|
-
throw new Error(`search failed: ${error.message}`);
|
|
54
|
-
return (data ?? []).map((row) => ({
|
|
55
|
-
id: row.id,
|
|
56
|
-
text: row.text,
|
|
57
|
-
score: row.similarity,
|
|
58
|
-
metadata: row.metadata ?? {},
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
async delete(ids) {
|
|
62
|
-
if (ids.length === 0)
|
|
63
|
-
return;
|
|
64
|
-
const { error } = await this.client
|
|
65
|
-
.from(this.tableName)
|
|
66
|
-
.delete()
|
|
67
|
-
.in('id', ids);
|
|
68
|
-
if (error)
|
|
69
|
-
throw new Error(`delete failed: ${error.message}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
exports.SupabaseSemanticMemory = SupabaseSemanticMemory;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { EmbeddingAdapter } from '../memory/types';
|
|
2
|
-
export interface AiBinding {
|
|
3
|
-
run(model: string, input: {
|
|
4
|
-
text: string[];
|
|
5
|
-
}): Promise<{
|
|
6
|
-
data: number[][];
|
|
7
|
-
}>;
|
|
8
|
-
}
|
|
9
|
-
export interface CloudflareAIEmbeddingOptions {
|
|
10
|
-
ai: AiBinding;
|
|
11
|
-
model?: string;
|
|
12
|
-
dimension?: number;
|
|
13
|
-
}
|
|
14
|
-
export declare function cloudflareAIEmbedding(options: CloudflareAIEmbeddingOptions): EmbeddingAdapter;
|
|
15
|
-
//# sourceMappingURL=cloudflare.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/embedding/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,GAAG,CACD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GACxB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,gBAAgB,CAWlB"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
const DEFAULT_MODEL = '@cf/baai/bge-base-en-v1.5';
|
|
2
|
-
const DEFAULT_DIMENSION = 768;
|
|
3
|
-
export function cloudflareAIEmbedding(options) {
|
|
4
|
-
const model = options.model ?? DEFAULT_MODEL;
|
|
5
|
-
const dimension = options.dimension ?? DEFAULT_DIMENSION;
|
|
6
|
-
return {
|
|
7
|
-
dimension,
|
|
8
|
-
async embed(text) {
|
|
9
|
-
const result = await options.ai.run(model, { text: [text] });
|
|
10
|
-
return result.data[0];
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { EmbeddingAdapter } from '../memory/types';
|
|
2
|
-
export interface CohereEmbeddingOptions {
|
|
3
|
-
apiKey: string;
|
|
4
|
-
model?: string;
|
|
5
|
-
inputType?: 'search_document' | 'search_query';
|
|
6
|
-
}
|
|
7
|
-
export declare function cohereEmbedding(options: CohereEmbeddingOptions): EmbeddingAdapter;
|
|
8
|
-
//# sourceMappingURL=cohere.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cohere.d.ts","sourceRoot":"","sources":["../../../src/embedding/cohere.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC;CAChD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CA4BjF"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export function cohereEmbedding(options) {
|
|
2
|
-
const model = options.model ?? 'embed-english-v3.0';
|
|
3
|
-
const inputType = options.inputType ?? 'search_document';
|
|
4
|
-
const dimension = model.includes('v3') ? 1024 : 768;
|
|
5
|
-
return {
|
|
6
|
-
dimension,
|
|
7
|
-
embed: async (text) => {
|
|
8
|
-
const res = await fetch('https://api.cohere.com/v2/embed', {
|
|
9
|
-
method: 'POST',
|
|
10
|
-
headers: {
|
|
11
|
-
'Authorization': `Bearer ${options.apiKey}`,
|
|
12
|
-
'Content-Type': 'application/json',
|
|
13
|
-
},
|
|
14
|
-
body: JSON.stringify({
|
|
15
|
-
model,
|
|
16
|
-
texts: [text],
|
|
17
|
-
input_type: inputType,
|
|
18
|
-
embedding_types: ['float'],
|
|
19
|
-
}),
|
|
20
|
-
});
|
|
21
|
-
if (!res.ok) {
|
|
22
|
-
throw new Error(`Cohere embedding failed: ${res.status} ${res.statusText}`);
|
|
23
|
-
}
|
|
24
|
-
const json = await res.json();
|
|
25
|
-
return json.embeddings.float[0];
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { openaiEmbedding } from './openai';
|
|
2
|
-
export { cohereEmbedding } from './cohere';
|
|
3
|
-
export { createLocalEmbedder } from './local';
|
|
4
|
-
export { cloudflareAIEmbedding } from './cloudflare';
|
|
5
|
-
export type { OpenAIEmbeddingOptions } from './openai';
|
|
6
|
-
export type { CohereEmbeddingOptions } from './cohere';
|
|
7
|
-
export type { LocalEmbedderOptions } from './local';
|
|
8
|
-
export type { CloudflareAIEmbeddingOptions, AiBinding } from './cloudflare';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/embedding/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,4BAA4B,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/embedding/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CA4B3B"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export async function createLocalEmbedder(options) {
|
|
2
|
-
const modelId = options?.model ?? 'Xenova/all-MiniLM-L6-v2';
|
|
3
|
-
let pipeline;
|
|
4
|
-
try {
|
|
5
|
-
const transformers = await Function('return import("@huggingface/transformers")')();
|
|
6
|
-
pipeline = transformers.pipeline;
|
|
7
|
-
}
|
|
8
|
-
catch {
|
|
9
|
-
throw new Error('@huggingface/transformers is required for local embeddings. ' +
|
|
10
|
-
'Install it: npm install @huggingface/transformers');
|
|
11
|
-
}
|
|
12
|
-
const extractor = await pipeline('feature-extraction', modelId);
|
|
13
|
-
const probe = await extractor('test', { pooling: 'mean', normalize: true });
|
|
14
|
-
const dimension = probe.data.length;
|
|
15
|
-
return {
|
|
16
|
-
dimension,
|
|
17
|
-
embed: async (text) => {
|
|
18
|
-
const output = await extractor(text, {
|
|
19
|
-
pooling: 'mean',
|
|
20
|
-
normalize: true,
|
|
21
|
-
});
|
|
22
|
-
return Array.from(output.data);
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { EmbeddingAdapter } from '../memory/types';
|
|
2
|
-
export interface OpenAIEmbeddingOptions {
|
|
3
|
-
apiKey: string;
|
|
4
|
-
model?: string;
|
|
5
|
-
dimension?: number;
|
|
6
|
-
baseUrl?: string;
|
|
7
|
-
}
|
|
8
|
-
export declare function openaiEmbedding(options: OpenAIEmbeddingOptions): EmbeddingAdapter;
|
|
9
|
-
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/embedding/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CAuBjF"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export function openaiEmbedding(options) {
|
|
2
|
-
const model = options.model ?? 'text-embedding-3-small';
|
|
3
|
-
const dimension = options.dimension ?? 1536;
|
|
4
|
-
const baseUrl = options.baseUrl ?? 'https://api.openai.com';
|
|
5
|
-
return {
|
|
6
|
-
dimension,
|
|
7
|
-
embed: async (text) => {
|
|
8
|
-
const res = await fetch(`${baseUrl}/v1/embeddings`, {
|
|
9
|
-
method: 'POST',
|
|
10
|
-
headers: {
|
|
11
|
-
'Authorization': `Bearer ${options.apiKey}`,
|
|
12
|
-
'Content-Type': 'application/json',
|
|
13
|
-
},
|
|
14
|
-
body: JSON.stringify({ model, input: text, dimensions: dimension }),
|
|
15
|
-
});
|
|
16
|
-
if (!res.ok) {
|
|
17
|
-
throw new Error(`OpenAI embedding failed: ${res.status} ${res.statusText}`);
|
|
18
|
-
}
|
|
19
|
-
const json = await res.json();
|
|
20
|
-
return json.data[0].embedding;
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { EventAdapter, SDKEvent } from './types';
|
|
2
|
-
export interface ConsoleEventAdapterOptions {
|
|
3
|
-
/** Prefix for log lines. Default: '[molroo]'. */
|
|
4
|
-
prefix?: string;
|
|
5
|
-
/** Only emit these event types. Empty = all. */
|
|
6
|
-
filter?: string[];
|
|
7
|
-
/** Output format. Default: 'human'. */
|
|
8
|
-
format?: 'human' | 'json';
|
|
9
|
-
/** Custom logger function. Default: console.log. */
|
|
10
|
-
logger?: (message: string) => void;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Console-based EventAdapter for development/debugging.
|
|
14
|
-
* Logs events to console (or a custom logger function).
|
|
15
|
-
*/
|
|
16
|
-
export declare class ConsoleEventAdapter implements EventAdapter {
|
|
17
|
-
private prefix;
|
|
18
|
-
private filter;
|
|
19
|
-
private format;
|
|
20
|
-
private logger;
|
|
21
|
-
constructor(options?: ConsoleEventAdapterOptions);
|
|
22
|
-
emit(event: SDKEvent): Promise<void>;
|
|
23
|
-
emitBatch(events: SDKEvent[]): Promise<void>;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=console.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/events/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,0BAA0B;IACzC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,oDAAoD;IACpD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAA4B;gBAE9B,OAAO,CAAC,EAAE,0BAA0B;IAO1C,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAapC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAKnD"}
|