@molroo-io/sdk 0.6.2 → 0.7.0
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 +6 -4
- 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 +7 -5
- package/dist/cjs/world/world-persona.d.ts.map +1 -1
- package/dist/cjs/world/world-persona.js +2 -17
- 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 +6 -4
- 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 +7 -5
- package/dist/esm/world/world-persona.d.ts.map +1 -1
- package/dist/esm/world/world-persona.js +2 -17
- 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
package/dist/cjs/index.js
CHANGED
|
@@ -2,69 +2,46 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* @molroo-io/sdk - Thin Client SDK for molroo emotion engine
|
|
4
4
|
*
|
|
5
|
-
* ##
|
|
6
|
-
* - **LLM calls happen HERE** — consumer's API key, consumer's model.
|
|
7
|
-
* - **Appraisal generation happens HERE** — LLM produces appraisal, SDK sends to API.
|
|
8
|
-
* - **Memory recall happens HERE** — episodic/semantic/reflections from client stores.
|
|
9
|
-
* - **Prompt composition**: API returns persona fragment → SDK adds memory context.
|
|
5
|
+
* ## Quick Start
|
|
10
6
|
*
|
|
11
|
-
* The API/engine never call LLM. This SDK is the bridge.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
7
|
* ```typescript
|
|
15
|
-
* import {
|
|
16
|
-
* import {
|
|
8
|
+
* import { Molroo } from '@molroo-io/sdk';
|
|
9
|
+
* import { createOpenAI } from '@ai-sdk/openai';
|
|
10
|
+
*
|
|
11
|
+
* const molroo = new Molroo({ apiKey: 'mk_live_...' });
|
|
12
|
+
*
|
|
13
|
+
* const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY! });
|
|
17
14
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* }
|
|
15
|
+
* // Create persona from description
|
|
16
|
+
* const sera = await molroo.createPersona(
|
|
17
|
+
* 'A kind and curious barista named Sera',
|
|
18
|
+
* { llm: openai }
|
|
19
|
+
* );
|
|
22
20
|
*
|
|
23
|
-
* const
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* }, {
|
|
28
|
-
* config: { identity: { name: 'Sera' }, personality: { O: 0.7, C: 0.6, E: 0.8, A: 0.5, N: 0.3, H: 0.6 } },
|
|
29
|
-
* });
|
|
21
|
+
* const result = await sera.chat('Hello!');
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* ## Advanced: World Simulation
|
|
30
25
|
*
|
|
31
|
-
*
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const world = await molroo.createWorld({ name: 'Cafe' });
|
|
28
|
+
* const sera = await molroo.createPersona('Barista Sera', { llm: openai });
|
|
29
|
+
* await world.addPersona({ personaConfigId: sera.id, config: {...} });
|
|
32
30
|
* ```
|
|
33
31
|
*/
|
|
34
32
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.withDefaults = exports.DEFAULT_PERSONA = exports.
|
|
33
|
+
exports.withDefaults = exports.DEFAULT_PERSONA = exports.fromWireAppraisal = exports.toWireAppraisal = exports.NEUTRAL_APPRAISAL = exports.WorldApiError = exports.MolrooApiError = exports.Molroo = void 0;
|
|
36
34
|
// ── Main exports ──
|
|
37
35
|
var world_1 = require("./world/world");
|
|
38
36
|
Object.defineProperty(exports, "Molroo", { enumerable: true, get: function () { return world_1.Molroo; } });
|
|
39
|
-
var
|
|
40
|
-
Object.defineProperty(exports, "
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
var
|
|
44
|
-
Object.defineProperty(exports, "
|
|
45
|
-
Object.defineProperty(exports, "
|
|
46
|
-
|
|
47
|
-
Object.defineProperty(exports, "isMemoryConfig", { enumerable: true, get: function () { return types_2.isMemoryConfig; } });
|
|
48
|
-
var in_memory_1 = require("./memory/in-memory");
|
|
49
|
-
Object.defineProperty(exports, "InMemoryEpisodeAdapter", { enumerable: true, get: function () { return in_memory_1.InMemoryEpisodeAdapter; } });
|
|
50
|
-
var in_memory_semantic_1 = require("./memory/in-memory-semantic");
|
|
51
|
-
Object.defineProperty(exports, "InMemorySemanticMemory", { enumerable: true, get: function () { return in_memory_semantic_1.InMemorySemanticMemory; } });
|
|
52
|
-
var in_memory_2 = require("./memory/in-memory");
|
|
53
|
-
Object.defineProperty(exports, "InMemoryEpisodeStore", { enumerable: true, get: function () { return in_memory_2.InMemoryEpisodeStore; } });
|
|
54
|
-
var console_1 = require("./events/console");
|
|
55
|
-
Object.defineProperty(exports, "ConsoleEventAdapter", { enumerable: true, get: function () { return console_1.ConsoleEventAdapter; } });
|
|
56
|
-
var webhook_1 = require("./events/webhook");
|
|
57
|
-
Object.defineProperty(exports, "WebhookEventAdapter", { enumerable: true, get: function () { return webhook_1.WebhookEventAdapter; } });
|
|
58
|
-
// ── Generate ──
|
|
59
|
-
var persona_2 = require("./generate/persona");
|
|
60
|
-
Object.defineProperty(exports, "generatePersona", { enumerable: true, get: function () { return persona_2.generatePersona; } });
|
|
61
|
-
var schema_1 = require("./generate/schema");
|
|
62
|
-
Object.defineProperty(exports, "GeneratePersonaSchema", { enumerable: true, get: function () { return schema_1.GeneratePersonaSchema; } });
|
|
63
|
-
// ── LLM types & schemas ──
|
|
64
|
-
var schema_2 = require("./llm/schema");
|
|
65
|
-
Object.defineProperty(exports, "AppraisalVectorSchema", { enumerable: true, get: function () { return schema_2.AppraisalVectorSchema; } });
|
|
66
|
-
Object.defineProperty(exports, "LLMResponseSchema", { enumerable: true, get: function () { return schema_2.LLMResponseSchema; } });
|
|
67
|
-
Object.defineProperty(exports, "LLMResponseWithToolsSchema", { enumerable: true, get: function () { return schema_2.LLMResponseWithToolsSchema; } });
|
|
37
|
+
var errors_1 = require("./shared/errors");
|
|
38
|
+
Object.defineProperty(exports, "MolrooApiError", { enumerable: true, get: function () { return errors_1.MolrooApiError; } });
|
|
39
|
+
Object.defineProperty(exports, "WorldApiError", { enumerable: true, get: function () { return errors_1.WorldApiError; } });
|
|
40
|
+
// ── Shared utilities ──
|
|
41
|
+
var appraisal_1 = require("./shared/appraisal");
|
|
42
|
+
Object.defineProperty(exports, "NEUTRAL_APPRAISAL", { enumerable: true, get: function () { return appraisal_1.NEUTRAL_APPRAISAL; } });
|
|
43
|
+
Object.defineProperty(exports, "toWireAppraisal", { enumerable: true, get: function () { return appraisal_1.toWireAppraisal; } });
|
|
44
|
+
Object.defineProperty(exports, "fromWireAppraisal", { enumerable: true, get: function () { return appraisal_1.fromWireAppraisal; } });
|
|
68
45
|
// ── Defaults ──
|
|
69
46
|
var defaults_1 = require("./defaults");
|
|
70
47
|
Object.defineProperty(exports, "DEFAULT_PERSONA", { enumerable: true, get: function () { return defaults_1.DEFAULT_PERSONA; } });
|
|
@@ -1,28 +1,10 @@
|
|
|
1
1
|
import type { LLMAdapter } from './adapter';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* @example
|
|
6
|
-
* ```typescript
|
|
7
|
-
* const persona = await MolrooPersona.create({
|
|
8
|
-
* baseUrl, apiKey,
|
|
9
|
-
* llm: { provider: 'openai', apiKey: '...' },
|
|
10
|
-
* }, config);
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
export interface LLMShorthand {
|
|
14
|
-
provider: 'openai' | 'anthropic' | 'vertex' | 'openrouter';
|
|
15
|
-
apiKey: string;
|
|
16
|
-
model?: string;
|
|
17
|
-
baseUrl?: string;
|
|
18
|
-
projectId?: string;
|
|
19
|
-
location?: string;
|
|
20
|
-
}
|
|
21
|
-
/** LLM adapter or shorthand config. */
|
|
22
|
-
export type LLMInput = LLMAdapter | LLMShorthand;
|
|
2
|
+
import type { LanguageModel } from 'ai';
|
|
3
|
+
/** LLM adapter or Vercel AI SDK provider instance. */
|
|
4
|
+
export type LLMInput = LLMAdapter | LanguageModel;
|
|
23
5
|
/**
|
|
24
6
|
* Resolve an LLMInput to an LLMAdapter.
|
|
25
|
-
* If a
|
|
7
|
+
* If a Vercel AI SDK provider is given, wraps it in VercelAIAdapter.
|
|
26
8
|
*/
|
|
27
9
|
export declare function resolveLLM(input: LLMInput): Promise<LLMAdapter>;
|
|
28
10
|
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/llm/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/llm/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,sDAAsD;AACtD,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;AAelD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBrE"}
|
package/dist/cjs/llm/resolve.js
CHANGED
|
@@ -2,19 +2,31 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveLLM = resolveLLM;
|
|
4
4
|
const vercel_ai_1 = require("./vercel-ai");
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Check if input is a Vercel AI SDK provider instance.
|
|
7
|
+
* Provider instances have a `doGenerate` method.
|
|
8
|
+
*/
|
|
9
|
+
function isVercelProvider(input) {
|
|
6
10
|
return (input != null &&
|
|
7
11
|
typeof input === 'object' &&
|
|
8
|
-
'
|
|
9
|
-
|
|
10
|
-
!('generateText' in input));
|
|
12
|
+
'doGenerate' in input &&
|
|
13
|
+
typeof input.doGenerate === 'function');
|
|
11
14
|
}
|
|
12
15
|
/**
|
|
13
16
|
* Resolve an LLMInput to an LLMAdapter.
|
|
14
|
-
* If a
|
|
17
|
+
* If a Vercel AI SDK provider is given, wraps it in VercelAIAdapter.
|
|
15
18
|
*/
|
|
16
19
|
async function resolveLLM(input) {
|
|
17
|
-
if
|
|
20
|
+
// Check if it's an adapter first
|
|
21
|
+
if (input != null &&
|
|
22
|
+
typeof input === 'object' &&
|
|
23
|
+
'generateText' in input &&
|
|
24
|
+
'generateObject' in input) {
|
|
18
25
|
return input;
|
|
19
|
-
|
|
26
|
+
}
|
|
27
|
+
// Vercel AI SDK provider instance - wrap it
|
|
28
|
+
if (isVercelProvider(input)) {
|
|
29
|
+
return new vercel_ai_1.VercelAIAdapter({ provider: input });
|
|
30
|
+
}
|
|
31
|
+
throw new Error('Invalid LLM input. Expected LLMAdapter or Vercel AI SDK provider instance.');
|
|
20
32
|
}
|
|
@@ -2,28 +2,22 @@ import type { LLMAdapter, GenerateTextOptions, GenerateObjectOptions } from '../
|
|
|
2
2
|
import type { VercelAIConfig } from './config';
|
|
3
3
|
/**
|
|
4
4
|
* Vercel AI SDK adapter for molroo.
|
|
5
|
-
*
|
|
5
|
+
* Wraps a pre-configured Vercel AI SDK provider instance.
|
|
6
6
|
*/
|
|
7
7
|
export declare class VercelAIAdapter implements LLMAdapter {
|
|
8
|
-
private
|
|
8
|
+
private provider;
|
|
9
|
+
private model?;
|
|
9
10
|
constructor(config: VercelAIConfig);
|
|
10
|
-
private getProvider;
|
|
11
|
-
/**
|
|
12
|
-
* Create a language model instance.
|
|
13
|
-
* For OpenAI-compatible APIs with custom baseUrl, uses .chat() to force
|
|
14
|
-
* Chat Completions API instead of the default Responses API.
|
|
15
|
-
*/
|
|
16
|
-
private getModel;
|
|
17
11
|
generateText(options: GenerateTextOptions): Promise<{
|
|
18
12
|
text: string;
|
|
19
13
|
}>;
|
|
20
14
|
generateObject<T>(options: GenerateObjectOptions<T>): Promise<{
|
|
21
15
|
object: T;
|
|
22
16
|
}>;
|
|
23
|
-
private getDefaultModel;
|
|
24
17
|
}
|
|
25
18
|
/**
|
|
26
19
|
* Factory function to create a VercelAIAdapter instance.
|
|
20
|
+
* @deprecated Create adapter directly: `new VercelAIAdapter({ provider })`
|
|
27
21
|
*/
|
|
28
22
|
export declare function createVercelAIAdapter(config: VercelAIConfig): VercelAIAdapter;
|
|
29
23
|
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/llm/vercel-ai/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/llm/vercel-ai/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAiD/C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,KAAK,CAAC,CAAS;gBAEX,MAAM,EAAE,cAAc;IAK5B,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAYrE,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC;CAiBnF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAE7E"}
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.VercelAIAdapter = void 0;
|
|
37
4
|
exports.createVercelAIAdapter = createVercelAIAdapter;
|
|
@@ -76,116 +43,18 @@ function strictifySchema(schema) {
|
|
|
76
43
|
function isZodSchema(schema) {
|
|
77
44
|
return schema && typeof schema === 'object' && '_def' in schema;
|
|
78
45
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Recursively strip `$schema` keys from any object.
|
|
81
|
-
* AI SDK's Zod->JSON Schema converter adds `$schema` which some
|
|
82
|
-
* OpenAI-compatible APIs (e.g. Kimi/Moonshot) reject.
|
|
83
|
-
*/
|
|
84
|
-
function stripDollarSchema(obj) {
|
|
85
|
-
if (!obj || typeof obj !== 'object')
|
|
86
|
-
return obj;
|
|
87
|
-
if (Array.isArray(obj))
|
|
88
|
-
return obj.map(stripDollarSchema);
|
|
89
|
-
const result = {};
|
|
90
|
-
for (const [k, v] of Object.entries(obj)) {
|
|
91
|
-
if (k === '$schema')
|
|
92
|
-
continue;
|
|
93
|
-
result[k] = stripDollarSchema(v);
|
|
94
|
-
}
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Create a fetch wrapper that strips `$schema` from JSON request bodies.
|
|
99
|
-
* Used for OpenAI-compatible APIs that reject non-standard schema keywords.
|
|
100
|
-
*/
|
|
101
|
-
function createSchemaStrippingFetch() {
|
|
102
|
-
return async (input, init) => {
|
|
103
|
-
if (init?.body && typeof init.body === 'string') {
|
|
104
|
-
try {
|
|
105
|
-
const parsed = JSON.parse(init.body);
|
|
106
|
-
if (parsed.response_format?.json_schema?.schema) {
|
|
107
|
-
parsed.response_format.json_schema.schema =
|
|
108
|
-
stripDollarSchema(parsed.response_format.json_schema.schema);
|
|
109
|
-
init = { ...init, body: JSON.stringify(parsed) };
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
// Not JSON, pass through
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const response = await globalThis.fetch(input, init);
|
|
117
|
-
// Debug: log error responses from provider
|
|
118
|
-
if (!response.ok && process.env.DEBUG_LLM) {
|
|
119
|
-
const cloned = response.clone();
|
|
120
|
-
try {
|
|
121
|
-
const body = await cloned.text();
|
|
122
|
-
console.error(`[adapter-llm] ${response.status} ${response.statusText}: ${body.slice(0, 500)}`);
|
|
123
|
-
}
|
|
124
|
-
catch { /* ignore */ }
|
|
125
|
-
}
|
|
126
|
-
return response;
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
46
|
/**
|
|
130
47
|
* Vercel AI SDK adapter for molroo.
|
|
131
|
-
*
|
|
48
|
+
* Wraps a pre-configured Vercel AI SDK provider instance.
|
|
132
49
|
*/
|
|
133
50
|
class VercelAIAdapter {
|
|
134
51
|
constructor(config) {
|
|
135
|
-
this.
|
|
136
|
-
|
|
137
|
-
async getProvider() {
|
|
138
|
-
switch (this.config.provider) {
|
|
139
|
-
case 'openai': {
|
|
140
|
-
const { createOpenAI } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/openai')));
|
|
141
|
-
return createOpenAI({
|
|
142
|
-
apiKey: this.config.apiKey,
|
|
143
|
-
...(this.config.baseUrl ? {
|
|
144
|
-
baseURL: this.config.baseUrl,
|
|
145
|
-
fetch: createSchemaStrippingFetch(),
|
|
146
|
-
} : {}),
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
case 'anthropic': {
|
|
150
|
-
const { createAnthropic } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/anthropic')));
|
|
151
|
-
return createAnthropic({ apiKey: this.config.apiKey });
|
|
152
|
-
}
|
|
153
|
-
case 'openrouter': {
|
|
154
|
-
const { createOpenAI } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/openai')));
|
|
155
|
-
return createOpenAI({
|
|
156
|
-
apiKey: this.config.apiKey,
|
|
157
|
-
baseURL: 'https://openrouter.ai/api/v1',
|
|
158
|
-
fetch: createSchemaStrippingFetch(),
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
case 'vertex': {
|
|
162
|
-
const { createVertex } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/google-vertex')));
|
|
163
|
-
return createVertex({
|
|
164
|
-
project: this.config.projectId,
|
|
165
|
-
location: this.config.location || 'us-central1'
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
default:
|
|
169
|
-
throw new Error(`Unknown provider: ${this.config.provider}`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Create a language model instance.
|
|
174
|
-
* For OpenAI-compatible APIs with custom baseUrl, uses .chat() to force
|
|
175
|
-
* Chat Completions API instead of the default Responses API.
|
|
176
|
-
*/
|
|
177
|
-
async getModel(modelName) {
|
|
178
|
-
const provider = await this.getProvider();
|
|
179
|
-
if (this.config.provider === 'openrouter' || (this.config.provider === 'openai' && this.config.baseUrl)) {
|
|
180
|
-
return provider.chat(modelName);
|
|
181
|
-
}
|
|
182
|
-
return provider(modelName);
|
|
52
|
+
this.provider = config.provider;
|
|
53
|
+
this.model = config.model;
|
|
183
54
|
}
|
|
184
55
|
async generateText(options) {
|
|
185
|
-
const modelName = this.config.model || this.getDefaultModel();
|
|
186
|
-
const model = await this.getModel(modelName);
|
|
187
56
|
const result = await (0, ai_1.generateText)({
|
|
188
|
-
model,
|
|
57
|
+
model: this.provider,
|
|
189
58
|
system: options.system,
|
|
190
59
|
messages: options.messages,
|
|
191
60
|
...(options.temperature !== undefined && { temperature: options.temperature }),
|
|
@@ -194,40 +63,25 @@ class VercelAIAdapter {
|
|
|
194
63
|
return { text: result.text };
|
|
195
64
|
}
|
|
196
65
|
async generateObject(options) {
|
|
197
|
-
const modelName = this.config.model || this.getDefaultModel();
|
|
198
|
-
const model = await this.getModel(modelName);
|
|
199
66
|
// Zod schemas can be passed directly to AI SDK.
|
|
200
67
|
// Plain JSON schemas need strictification for OpenAI compatibility.
|
|
201
68
|
const resolvedSchema = isZodSchema(options.schema)
|
|
202
69
|
? options.schema
|
|
203
70
|
: (0, ai_1.jsonSchema)(strictifySchema(options.schema));
|
|
204
|
-
// OpenRouter and custom baseUrl providers often don't support strict
|
|
205
|
-
// json_schema mode. Use tool calling mode which is more widely supported.
|
|
206
|
-
const isProxied = this.config.provider === 'openrouter' ||
|
|
207
|
-
(this.config.provider === 'openai' && !!this.config.baseUrl);
|
|
208
71
|
const result = await (0, ai_1.generateObject)({
|
|
209
|
-
model,
|
|
72
|
+
model: this.provider,
|
|
210
73
|
schema: resolvedSchema,
|
|
211
74
|
system: options.system,
|
|
212
75
|
messages: options.messages,
|
|
213
|
-
...(isProxied && { mode: 'tool' }),
|
|
214
76
|
...(options.temperature !== undefined && { temperature: options.temperature }),
|
|
215
77
|
});
|
|
216
78
|
return { object: result.object };
|
|
217
79
|
}
|
|
218
|
-
getDefaultModel() {
|
|
219
|
-
switch (this.config.provider) {
|
|
220
|
-
case 'openai': return 'gpt-4o';
|
|
221
|
-
case 'anthropic': return 'claude-sonnet-4-5-20250929';
|
|
222
|
-
case 'openrouter': return 'anthropic/claude-sonnet-4-5';
|
|
223
|
-
case 'vertex': return 'gemini-2.0-flash';
|
|
224
|
-
default: return 'gpt-4o';
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
80
|
}
|
|
228
81
|
exports.VercelAIAdapter = VercelAIAdapter;
|
|
229
82
|
/**
|
|
230
83
|
* Factory function to create a VercelAIAdapter instance.
|
|
84
|
+
* @deprecated Create adapter directly: `new VercelAIAdapter({ provider })`
|
|
231
85
|
*/
|
|
232
86
|
function createVercelAIAdapter(config) {
|
|
233
87
|
return new VercelAIAdapter(config);
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import type { LanguageModel } from 'ai';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for VercelAIAdapter.
|
|
4
|
+
* Accepts a pre-configured Vercel AI SDK provider instance.
|
|
5
|
+
*/
|
|
1
6
|
export interface VercelAIConfig {
|
|
2
|
-
|
|
3
|
-
|
|
7
|
+
/** Pre-configured Vercel AI SDK provider instance (e.g., from createOpenAI()) */
|
|
8
|
+
provider: LanguageModel;
|
|
9
|
+
/** Default model name. If not provided, uses provider's default */
|
|
4
10
|
model?: string;
|
|
5
|
-
baseUrl?: string;
|
|
6
|
-
projectId?: string;
|
|
7
|
-
location?: string;
|
|
8
11
|
}
|
|
9
12
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/llm/vercel-ai/config.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/llm/vercel-ai/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,QAAQ,EAAE,aAAa,CAAC;IACxB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -1,46 +1,23 @@
|
|
|
1
|
-
import type { Episode } from '../types';
|
|
2
|
-
import type { EpisodeAdapter, EpisodeQuery, MemoryAdapter, RecallQuery, Reflection } from './types';
|
|
3
1
|
/**
|
|
4
|
-
* In-memory
|
|
5
|
-
*
|
|
6
|
-
* Useful for demos, testing, and prototyping. Data is lost on process exit
|
|
7
|
-
* unless explicitly serialized via `toJSON()` / `fromJSON()`.
|
|
8
|
-
*
|
|
9
|
-
* Can be used as:
|
|
10
|
-
* - `memory: { episodes: new InMemoryEpisodeAdapter() }` (split config)
|
|
11
|
-
* - `memory: new InMemoryEpisodeAdapter()` (single adapter)
|
|
2
|
+
* In-memory adapter for testing purposes.
|
|
3
|
+
* Not recommended for production use (data is lost on restart).
|
|
12
4
|
*/
|
|
13
|
-
|
|
5
|
+
import type { Episode, Reflection } from './types';
|
|
6
|
+
import type { MemoryAdapter, RecallQuery } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Simple in-memory adapter for testing.
|
|
9
|
+
* Stores episodes in memory only.
|
|
10
|
+
*/
|
|
11
|
+
export declare class InMemoryAdapter implements MemoryAdapter {
|
|
14
12
|
private episodes;
|
|
15
13
|
private reflections;
|
|
16
14
|
saveEpisode(episode: Episode): Promise<void>;
|
|
17
|
-
|
|
18
|
-
* Recall episodes by query.
|
|
19
|
-
* Accepts both `EpisodeQuery` (with `contextContains`) and `RecallQuery` (with `context`).
|
|
20
|
-
*/
|
|
21
|
-
recall(query: EpisodeQuery | RecallQuery): Promise<Episode[]>;
|
|
22
|
-
getByIds(ids: string[]): Promise<Episode[]>;
|
|
15
|
+
recall(query: RecallQuery): Promise<Episode[]>;
|
|
23
16
|
saveReflection(reflection: Reflection): Promise<void>;
|
|
24
|
-
getReflections(sourceEntity?: string
|
|
25
|
-
/**
|
|
26
|
-
toJSON(): {
|
|
27
|
-
episodes: Episode[];
|
|
28
|
-
reflections: Reflection[];
|
|
29
|
-
};
|
|
30
|
-
/** Restore data from a previous export. */
|
|
31
|
-
fromJSON(data: {
|
|
32
|
-
episodes?: Episode[];
|
|
33
|
-
reflections?: Reflection[];
|
|
34
|
-
}): void;
|
|
35
|
-
/** Number of stored episodes. */
|
|
36
|
-
get episodeCount(): number;
|
|
37
|
-
/** Number of stored reflections. */
|
|
38
|
-
get reflectionCount(): number;
|
|
39
|
-
/** Clear all data. */
|
|
17
|
+
getReflections(sourceEntity?: string): Promise<Reflection[]>;
|
|
18
|
+
/** Clear all stored data (for testing). */
|
|
40
19
|
clear(): void;
|
|
41
20
|
}
|
|
42
|
-
/** @deprecated Use
|
|
43
|
-
export declare const
|
|
44
|
-
/** @deprecated Use InMemoryEpisodeAdapter */
|
|
45
|
-
export type InMemoryEpisodeStore = InMemoryEpisodeAdapter;
|
|
21
|
+
/** @deprecated Use InMemoryAdapter */
|
|
22
|
+
export declare const InMemoryEpisodeAdapter: typeof InMemoryAdapter;
|
|
46
23
|
//# sourceMappingURL=in-memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/memory/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/memory/in-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D;;;GAGG;AACH,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAoB;IAEjC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAwB9C,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOlE,2CAA2C;IAC3C,KAAK,IAAI,IAAI;CAId;AAED,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,wBAAkB,CAAC"}
|
|
@@ -1,115 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.InMemoryEpisodeAdapter = exports.InMemoryAdapter = void 0;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Useful for demos, testing, and prototyping. Data is lost on process exit
|
|
8
|
-
* unless explicitly serialized via `toJSON()` / `fromJSON()`.
|
|
9
|
-
*
|
|
10
|
-
* Can be used as:
|
|
11
|
-
* - `memory: { episodes: new InMemoryEpisodeAdapter() }` (split config)
|
|
12
|
-
* - `memory: new InMemoryEpisodeAdapter()` (single adapter)
|
|
5
|
+
* Simple in-memory adapter for testing.
|
|
6
|
+
* Stores episodes in memory only.
|
|
13
7
|
*/
|
|
14
|
-
class
|
|
8
|
+
class InMemoryAdapter {
|
|
15
9
|
constructor() {
|
|
16
10
|
this.episodes = [];
|
|
17
11
|
this.reflections = [];
|
|
18
12
|
}
|
|
19
13
|
async saveEpisode(episode) {
|
|
20
|
-
|
|
21
|
-
if (idx >= 0) {
|
|
22
|
-
this.episodes[idx] = episode;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
this.episodes.push(episode);
|
|
26
|
-
}
|
|
14
|
+
this.episodes.push(episode);
|
|
27
15
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Recall episodes by query.
|
|
30
|
-
* Accepts both `EpisodeQuery` (with `contextContains`) and `RecallQuery` (with `context`).
|
|
31
|
-
*/
|
|
32
16
|
async recall(query) {
|
|
33
17
|
let results = [...this.episodes];
|
|
34
18
|
if (query.sourceEntity) {
|
|
35
|
-
results = results.filter(
|
|
19
|
+
results = results.filter(ep => ep.sourceEntity === query.sourceEntity);
|
|
36
20
|
}
|
|
37
|
-
|
|
38
|
-
const contextSearch = ('contextContains' in query ? query.contextContains : undefined)
|
|
39
|
-
?? ('context' in query ? query.context : undefined);
|
|
40
|
-
if (contextSearch) {
|
|
41
|
-
const lower = contextSearch.toLowerCase();
|
|
42
|
-
results = results.filter(e => e.context?.toLowerCase().includes(lower));
|
|
43
|
-
}
|
|
44
|
-
if (query.type !== undefined) {
|
|
21
|
+
if (query.type) {
|
|
45
22
|
const types = Array.isArray(query.type) ? query.type : [query.type];
|
|
46
|
-
results = results.filter(
|
|
23
|
+
results = results.filter(ep => ep.type && types.includes(ep.type));
|
|
47
24
|
}
|
|
48
25
|
if (query.minImportance !== undefined) {
|
|
49
|
-
results = results.filter(
|
|
50
|
-
}
|
|
51
|
-
if (query.timeRange) {
|
|
52
|
-
const [from, to] = query.timeRange;
|
|
53
|
-
results = results.filter(e => e.timestamp >= from && e.timestamp <= to);
|
|
26
|
+
results = results.filter(ep => ep.importance >= query.minImportance);
|
|
54
27
|
}
|
|
55
|
-
|
|
56
|
-
const [min, max] = query.valenceRange;
|
|
57
|
-
results = results.filter(e => e.emotionSnapshot.V >= min && e.emotionSnapshot.V <= max);
|
|
58
|
-
}
|
|
59
|
-
// Sort by timestamp descending (most recent first)
|
|
28
|
+
// Sort by timestamp desc
|
|
60
29
|
results.sort((a, b) => b.timestamp - a.timestamp);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const idSet = new Set(ids);
|
|
66
|
-
return this.episodes.filter(e => idSet.has(e.id));
|
|
30
|
+
if (query.limit) {
|
|
31
|
+
results = results.slice(0, query.limit);
|
|
32
|
+
}
|
|
33
|
+
return results;
|
|
67
34
|
}
|
|
68
35
|
async saveReflection(reflection) {
|
|
69
|
-
|
|
70
|
-
if (idx >= 0) {
|
|
71
|
-
this.reflections[idx] = reflection;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
this.reflections.push(reflection);
|
|
75
|
-
}
|
|
36
|
+
this.reflections.push(reflection);
|
|
76
37
|
}
|
|
77
|
-
async getReflections(sourceEntity
|
|
78
|
-
let results = [...this.reflections];
|
|
38
|
+
async getReflections(sourceEntity) {
|
|
79
39
|
if (sourceEntity) {
|
|
80
|
-
|
|
40
|
+
return this.reflections.filter(r => r.sourceEntity === sourceEntity);
|
|
81
41
|
}
|
|
82
|
-
|
|
83
|
-
results.sort((a, b) => b.timestamp - a.timestamp);
|
|
84
|
-
return results.slice(0, limit ?? 10);
|
|
85
|
-
}
|
|
86
|
-
// ── Serialization helpers ──
|
|
87
|
-
/** Export all data for persistence (save slots, etc.). */
|
|
88
|
-
toJSON() {
|
|
89
|
-
return {
|
|
90
|
-
episodes: [...this.episodes],
|
|
91
|
-
reflections: [...this.reflections],
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
/** Restore data from a previous export. */
|
|
95
|
-
fromJSON(data) {
|
|
96
|
-
this.episodes = data.episodes ? [...data.episodes] : [];
|
|
97
|
-
this.reflections = data.reflections ? [...data.reflections] : [];
|
|
98
|
-
}
|
|
99
|
-
/** Number of stored episodes. */
|
|
100
|
-
get episodeCount() {
|
|
101
|
-
return this.episodes.length;
|
|
102
|
-
}
|
|
103
|
-
/** Number of stored reflections. */
|
|
104
|
-
get reflectionCount() {
|
|
105
|
-
return this.reflections.length;
|
|
42
|
+
return [...this.reflections];
|
|
106
43
|
}
|
|
107
|
-
/** Clear all data. */
|
|
44
|
+
/** Clear all stored data (for testing). */
|
|
108
45
|
clear() {
|
|
109
46
|
this.episodes = [];
|
|
110
47
|
this.reflections = [];
|
|
111
48
|
}
|
|
112
49
|
}
|
|
113
|
-
exports.
|
|
114
|
-
/** @deprecated Use
|
|
115
|
-
exports.
|
|
50
|
+
exports.InMemoryAdapter = InMemoryAdapter;
|
|
51
|
+
/** @deprecated Use InMemoryAdapter */
|
|
52
|
+
exports.InMemoryEpisodeAdapter = InMemoryAdapter;
|