aimemory-core 1.0.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/.eslintrc.json +22 -0
- package/.github/workflows/ci.yml +57 -0
- package/.prettierrc +8 -0
- package/README.md +197 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +41 -0
- package/dist/config.js.map +1 -0
- package/dist/contextBuilder.d.ts +16 -0
- package/dist/contextBuilder.d.ts.map +1 -0
- package/dist/contextBuilder.js +139 -0
- package/dist/contextBuilder.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +88 -0
- package/dist/index.js.map +1 -0
- package/dist/licensing.d.ts +45 -0
- package/dist/licensing.d.ts.map +1 -0
- package/dist/licensing.js +99 -0
- package/dist/licensing.js.map +1 -0
- package/dist/memoryManager.d.ts +35 -0
- package/dist/memoryManager.d.ts.map +1 -0
- package/dist/memoryManager.js +265 -0
- package/dist/memoryManager.js.map +1 -0
- package/dist/metadataStore.d.ts +24 -0
- package/dist/metadataStore.d.ts.map +1 -0
- package/dist/metadataStore.js +247 -0
- package/dist/metadataStore.js.map +1 -0
- package/dist/planManager.d.ts +80 -0
- package/dist/planManager.d.ts.map +1 -0
- package/dist/planManager.js +327 -0
- package/dist/planManager.js.map +1 -0
- package/dist/rateLimiter.d.ts +49 -0
- package/dist/rateLimiter.d.ts.map +1 -0
- package/dist/rateLimiter.js +142 -0
- package/dist/rateLimiter.js.map +1 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/postgres.d.ts +31 -0
- package/dist/storage/postgres.d.ts.map +1 -0
- package/dist/storage/postgres.js +171 -0
- package/dist/storage/postgres.js.map +1 -0
- package/dist/storage/redis.d.ts +34 -0
- package/dist/storage/redis.d.ts.map +1 -0
- package/dist/storage/redis.js +101 -0
- package/dist/storage/redis.js.map +1 -0
- package/dist/types.d.ts +95 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/usageTracker.d.ts +63 -0
- package/dist/usageTracker.d.ts.map +1 -0
- package/dist/usageTracker.js +238 -0
- package/dist/usageTracker.js.map +1 -0
- package/dist/vectorStore.d.ts +18 -0
- package/dist/vectorStore.d.ts.map +1 -0
- package/dist/vectorStore.js +97 -0
- package/dist/vectorStore.js.map +1 -0
- package/examples/advanced.ts +164 -0
- package/examples/basic.ts +87 -0
- package/package.json +60 -0
- package/src/config.ts +65 -0
- package/src/contextBuilder.ts +184 -0
- package/src/index.ts +209 -0
- package/src/licensing.ts +138 -0
- package/src/memoryManager.ts +340 -0
- package/src/metadataStore.ts +298 -0
- package/src/planManager.ts +417 -0
- package/src/rateLimiter.ts +186 -0
- package/src/storage/index.ts +2 -0
- package/src/storage/postgres.ts +209 -0
- package/src/storage/redis.ts +117 -0
- package/src/types.ts +114 -0
- package/src/usageTracker.ts +325 -0
- package/src/vectorStore.ts +116 -0
- package/tests/aibrain.test.ts +171 -0
- package/tests/contextBuilder.test.ts +138 -0
- package/tests/memoryManager.test.ts +205 -0
- package/tests/metadataStore.test.ts +131 -0
- package/tests/rateLimiter.test.ts +57 -0
- package/tests/usageTracker.test.ts +62 -0
- package/tests/vectorStore.test.ts +106 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +12 -0
package/.eslintrc.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"root": true,
|
|
3
|
+
"parser": "@typescript-eslint/parser",
|
|
4
|
+
"plugins": ["@typescript-eslint"],
|
|
5
|
+
"extends": [
|
|
6
|
+
"eslint:recommended",
|
|
7
|
+
"plugin:@typescript-eslint/recommended"
|
|
8
|
+
],
|
|
9
|
+
"parserOptions": {
|
|
10
|
+
"ecmaVersion": 2022,
|
|
11
|
+
"sourceType": "module"
|
|
12
|
+
},
|
|
13
|
+
"env": {
|
|
14
|
+
"node": true,
|
|
15
|
+
"es2022": true
|
|
16
|
+
},
|
|
17
|
+
"rules": {
|
|
18
|
+
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
|
|
19
|
+
"@typescript-eslint/explicit-function-return-type": "off",
|
|
20
|
+
"@typescript-eslint/no-explicit-any": "warn"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Use Node.js
|
|
17
|
+
uses: actions/setup-node@v4
|
|
18
|
+
with:
|
|
19
|
+
node-version: '20'
|
|
20
|
+
cache: 'npm'
|
|
21
|
+
|
|
22
|
+
- name: Install dependencies
|
|
23
|
+
run: npm ci
|
|
24
|
+
|
|
25
|
+
- name: Run linter
|
|
26
|
+
run: npm run lint
|
|
27
|
+
|
|
28
|
+
- name: Run tests
|
|
29
|
+
run: npm test
|
|
30
|
+
|
|
31
|
+
- name: Build
|
|
32
|
+
run: npm run build
|
|
33
|
+
|
|
34
|
+
publish:
|
|
35
|
+
needs: test
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
38
|
+
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@v4
|
|
41
|
+
|
|
42
|
+
- name: Use Node.js
|
|
43
|
+
uses: actions/setup-node@v4
|
|
44
|
+
with:
|
|
45
|
+
node-version: '20'
|
|
46
|
+
registry-url: 'https://registry.npmjs.org'
|
|
47
|
+
|
|
48
|
+
- name: Install dependencies
|
|
49
|
+
run: npm ci
|
|
50
|
+
|
|
51
|
+
- name: Build
|
|
52
|
+
run: npm run build
|
|
53
|
+
|
|
54
|
+
- name: Publish to npm
|
|
55
|
+
run: npm publish
|
|
56
|
+
env:
|
|
57
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/.prettierrc
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# AI Memory
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://img.shields.io/npm/v/ai-memory" alt="npm version">
|
|
5
|
+
<img src="https://img.shields.io/npm/dm/ai-memory" alt="npm downloads">
|
|
6
|
+
<img src="https://img.shields.io/github/license/ai-memory/ai-memory" alt="license">
|
|
7
|
+
<img src="https://img.shields.io/github/stars/ai-memory/ai-memory" alt="stars">
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
> Persistent memory system for LLM applications with semantic search, context management, and monetization-ready infrastructure.
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **Semantic Search** - Find relevant memories using vector embeddings and cosine similarity
|
|
15
|
+
- **Multi-User Support** - Manage memories for multiple users with proper isolation
|
|
16
|
+
- **Session Management** - Track conversations by session
|
|
17
|
+
- **Context Builder** - Build optimized context for LLM prompts
|
|
18
|
+
- **TypeScript Native** - Full TypeScript support with complete type definitions
|
|
19
|
+
- **Rate Limiting** - Built-in rate limiting ready for monetization
|
|
20
|
+
- **Usage Tracking** - Track API usage per user with configurable limits
|
|
21
|
+
- **Flexible Storage** - In-memory, Redis, or PostgreSQL persistence
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install aimemory-core
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Quick Start
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { createAIMemory, EmbeddingFunction } from 'ai-memory';
|
|
33
|
+
|
|
34
|
+
// Your embedding function (OpenAI, Cohere, etc.)
|
|
35
|
+
const embeddingFunction: EmbeddingFunction = async (text) => {
|
|
36
|
+
return await openai.embeddings.create({
|
|
37
|
+
model: 'text-embedding-ada-002',
|
|
38
|
+
input: text,
|
|
39
|
+
}).then(res => res.data[0].embedding);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const memory = createAIMemory({
|
|
43
|
+
maxMemories: 1000,
|
|
44
|
+
context: { maxTokens: 2000 }
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
memory.setEmbeddingFunction(embeddingFunction);
|
|
48
|
+
|
|
49
|
+
// Add memories
|
|
50
|
+
await memory.rememberFact('The user prefers dark mode', {
|
|
51
|
+
userId: 'user-123',
|
|
52
|
+
tags: ['preferences', 'ui']
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
await memory.rememberPreference('User likes bullet point summaries', {
|
|
56
|
+
userId: 'user-123',
|
|
57
|
+
tags: ['communication']
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Search relevant context
|
|
61
|
+
const results = await memory.recall('user preferences');
|
|
62
|
+
console.log(`Found ${results.length} relevant memories`);
|
|
63
|
+
|
|
64
|
+
// Build context for LLM
|
|
65
|
+
const context = await memory.getContext('What does user prefer?');
|
|
66
|
+
console.log(context.messages);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Core Concepts
|
|
70
|
+
|
|
71
|
+
### Memory Types
|
|
72
|
+
|
|
73
|
+
AI Memory supports different types of memories:
|
|
74
|
+
|
|
75
|
+
- **conversation** - User and assistant messages
|
|
76
|
+
- **fact** - Factual information about users
|
|
77
|
+
- **preference** - User preferences and likes
|
|
78
|
+
- **instruction** - Instructions or rules to follow
|
|
79
|
+
- **context** - General context information
|
|
80
|
+
- **custom** - Custom memory types
|
|
81
|
+
|
|
82
|
+
### Configuration
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
const memory = createAIMemory({
|
|
86
|
+
maxMemories: 10000, // Max memories per instance
|
|
87
|
+
defaultImportance: 0.5, // Default importance (0-1)
|
|
88
|
+
embeddingDimension: 1536, // Embedding vector dimension
|
|
89
|
+
context: {
|
|
90
|
+
maxTokens: 4000, // Max tokens in context
|
|
91
|
+
relevanceThreshold: 0.7, // Minimum relevance score
|
|
92
|
+
memoryTypes: ['fact', 'preference', 'instruction', 'conversation'],
|
|
93
|
+
maxMemories: 10, // Max memories in context
|
|
94
|
+
},
|
|
95
|
+
autoCleanup: {
|
|
96
|
+
enabled: true, // Auto cleanup old memories
|
|
97
|
+
maxAge: 90 * 24 * 60 * 60 * 1000, // 90 days
|
|
98
|
+
minImportance: 0.3,
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Monetization
|
|
104
|
+
|
|
105
|
+
AI Memory includes built-in support for usage limits and rate limiting:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { PlanManager, PLANS } from 'ai-memory';
|
|
109
|
+
|
|
110
|
+
const planManager = new PlanManager();
|
|
111
|
+
|
|
112
|
+
// Set user plan
|
|
113
|
+
planManager.setUserPlan('user-123', 'pro');
|
|
114
|
+
|
|
115
|
+
// Check rate limit
|
|
116
|
+
const rateResult = await planManager.checkRateLimit('user-123');
|
|
117
|
+
if (!rateResult.allowed) {
|
|
118
|
+
console.log(`Rate limit exceeded. Retry after ${rateResult.retryAfter}s`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Check usage limit
|
|
122
|
+
const usageResult = await planManager.checkUsageLimit('user-123', 'api_calls');
|
|
123
|
+
console.log(`Remaining: ${usageResult.remaining}/${usageResult.limit}`);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Available Plans
|
|
127
|
+
|
|
128
|
+
| Feature | Free | Pro | Enterprise |
|
|
129
|
+
|---------|------|-----|------------|
|
|
130
|
+
| Max Memories | 5,000 | 50,000 | Unlimited |
|
|
131
|
+
| Searches/Day | 500 | 10,000 | Unlimited |
|
|
132
|
+
| Persistence | In-Memory | Redis | PostgreSQL |
|
|
133
|
+
| Support | Community | Email | Priority 24/7 |
|
|
134
|
+
| Price | $0/mo | $29/mo | $99/mo |
|
|
135
|
+
|
|
136
|
+
## API Reference
|
|
137
|
+
|
|
138
|
+
### AIMemory Class
|
|
139
|
+
|
|
140
|
+
| Method | Description |
|
|
141
|
+
|--------|-------------|
|
|
142
|
+
| `remember(content, metadata)` | Add a memory |
|
|
143
|
+
| `rememberFact(content, metadata)` | Add factual memory |
|
|
144
|
+
| `rememberPreference(content, metadata)` | Add preference |
|
|
145
|
+
| `rememberInstruction(content, metadata)` | Add instruction |
|
|
146
|
+
| `recall(query, options)` | Search memories |
|
|
147
|
+
| `getContext(query)` | Build context for LLM |
|
|
148
|
+
| `getMemory(id)` | Get memory by ID |
|
|
149
|
+
| `updateMemory(id, updates)` | Update memory |
|
|
150
|
+
| `forget(id)` | Delete memory |
|
|
151
|
+
| `getRecentMemories(limit)` | Get recent memories |
|
|
152
|
+
| `getStats()` | Get memory statistics |
|
|
153
|
+
| `exportData()` | Export all memories |
|
|
154
|
+
| `importData(memories)` | Import memories |
|
|
155
|
+
|
|
156
|
+
## Storage Adapters
|
|
157
|
+
|
|
158
|
+
### Redis (for Pro plans)
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
import { createRedisRateLimiter } from 'ai-memory';
|
|
162
|
+
|
|
163
|
+
const store = createRedisRateLimiter({
|
|
164
|
+
host: 'localhost',
|
|
165
|
+
port: 6379,
|
|
166
|
+
password: 'your-password',
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### PostgreSQL (for Enterprise plans)
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
import { createPostgresUsageStore } from 'ai-memory';
|
|
174
|
+
|
|
175
|
+
const store = createPostgresUsageStore({
|
|
176
|
+
host: 'localhost',
|
|
177
|
+
port: 5432,
|
|
178
|
+
database: 'ai_memory',
|
|
179
|
+
user: 'postgres',
|
|
180
|
+
password: 'your-password',
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Use Cases
|
|
185
|
+
|
|
186
|
+
- **AI Chatbots** - Maintain conversation context across sessions
|
|
187
|
+
- **Virtual Assistants** - Remember user preferences and history
|
|
188
|
+
- **Customer Support** - Track customer interactions and issues
|
|
189
|
+
- **Analytics** - Analyze user behavior patterns over time
|
|
190
|
+
|
|
191
|
+
## License
|
|
192
|
+
|
|
193
|
+
MIT
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
<p align="center">Built with ❤️ for AI developers</p>
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ContextConfig } from './types.js';
|
|
2
|
+
export interface AIMemoryConfig {
|
|
3
|
+
storagePath: string;
|
|
4
|
+
maxMemories: number;
|
|
5
|
+
defaultImportance: number;
|
|
6
|
+
embeddingDimension: number;
|
|
7
|
+
context: ContextConfig;
|
|
8
|
+
autoCleanup: {
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
maxAge: number;
|
|
11
|
+
minImportance: number;
|
|
12
|
+
};
|
|
13
|
+
logging: {
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare const DEFAULT_CONFIG: AIMemoryConfig;
|
|
19
|
+
export declare function validateConfig(config: Partial<AIMemoryConfig>): AIMemoryConfig;
|
|
20
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;KAC5C,CAAC;CACH;AAED,eAAO,MAAM,cAAc,EAAE,cAuB5B,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAoB9E"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const DEFAULT_CONFIG = {
|
|
2
|
+
storagePath: './ai-memory-data',
|
|
3
|
+
maxMemories: 10000,
|
|
4
|
+
defaultImportance: 0.5,
|
|
5
|
+
embeddingDimension: 1536,
|
|
6
|
+
context: {
|
|
7
|
+
maxTokens: 4000,
|
|
8
|
+
includeSystemPrompt: true,
|
|
9
|
+
systemPrompt: 'You are a helpful AI assistant with memory of past conversations.',
|
|
10
|
+
relevanceThreshold: 0.7,
|
|
11
|
+
includeMetadata: false,
|
|
12
|
+
memoryTypes: ['conversation', 'fact', 'preference', 'context'],
|
|
13
|
+
maxMemories: 10,
|
|
14
|
+
},
|
|
15
|
+
autoCleanup: {
|
|
16
|
+
enabled: false,
|
|
17
|
+
maxAge: 90 * 24 * 60 * 60 * 1000,
|
|
18
|
+
minImportance: 0.3,
|
|
19
|
+
},
|
|
20
|
+
logging: {
|
|
21
|
+
enabled: true,
|
|
22
|
+
level: 'info',
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export function validateConfig(config) {
|
|
26
|
+
const merged = { ...DEFAULT_CONFIG, ...config };
|
|
27
|
+
if (merged.maxMemories < 1) {
|
|
28
|
+
throw new Error('maxMemories must be at least 1');
|
|
29
|
+
}
|
|
30
|
+
if (merged.embeddingDimension < 1) {
|
|
31
|
+
throw new Error('embeddingDimension must be at least 1');
|
|
32
|
+
}
|
|
33
|
+
if (merged.context.maxTokens < 100) {
|
|
34
|
+
throw new Error('context.maxTokens must be at least 100');
|
|
35
|
+
}
|
|
36
|
+
if (merged.context.relevanceThreshold < 0 || merged.context.relevanceThreshold > 1) {
|
|
37
|
+
throw new Error('context.relevanceThreshold must be between 0 and 1');
|
|
38
|
+
}
|
|
39
|
+
return merged;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,KAAK;IAClB,iBAAiB,EAAE,GAAG;IACtB,kBAAkB,EAAE,IAAI;IACxB,OAAO,EAAE;QACP,SAAS,EAAE,IAAI;QACf,mBAAmB,EAAE,IAAI;QACzB,YAAY,EAAE,mEAAmE;QACjF,kBAAkB,EAAE,GAAG;QACvB,eAAe,EAAE,KAAK;QACtB,WAAW,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAiB;QAC9E,WAAW,EAAE,EAAE;KAChB;IACD,WAAW,EAAE;QACX,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAChC,aAAa,EAAE,GAAG;KACnB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,MAAM;KACd;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC5D,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IAEhD,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,MAAM,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ContextConfig, ContextResult } from './types.js';
|
|
2
|
+
import { MemoryManager } from './memoryManager.js';
|
|
3
|
+
export declare class ContextBuilder {
|
|
4
|
+
private memoryManager;
|
|
5
|
+
private config;
|
|
6
|
+
constructor(memoryManager: MemoryManager, config?: Partial<ContextConfig>);
|
|
7
|
+
buildContext(query: string, additionalConfig?: Partial<ContextConfig>): Promise<ContextResult>;
|
|
8
|
+
private findRelevantMemories;
|
|
9
|
+
private buildContextContent;
|
|
10
|
+
private groupByType;
|
|
11
|
+
private estimateTokens;
|
|
12
|
+
updateConfig(config: Partial<ContextConfig>): void;
|
|
13
|
+
getConfig(): Readonly<ContextConfig>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createContextBuilder(memoryManager: MemoryManager, config?: Partial<ContextConfig>): ContextBuilder;
|
|
16
|
+
//# sourceMappingURL=contextBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextBuilder.d.ts","sourceRoot":"","sources":["../src/contextBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,aAAa,EACb,aAAa,EAGd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAgB;gBAElB,aAAa,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAcnE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;YAoCtF,oBAAoB;IAmBlC,OAAO,CAAC,mBAAmB;IAuD3B,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,cAAc;IAWtB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAIlD,SAAS,IAAI,QAAQ,CAAC,aAAa,CAAC;CAGrC;AAED,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,cAAc,CAEhB"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
export class ContextBuilder {
|
|
2
|
+
memoryManager;
|
|
3
|
+
config;
|
|
4
|
+
constructor(memoryManager, config) {
|
|
5
|
+
this.memoryManager = memoryManager;
|
|
6
|
+
this.config = {
|
|
7
|
+
maxTokens: 4000,
|
|
8
|
+
includeSystemPrompt: true,
|
|
9
|
+
systemPrompt: 'You are a helpful AI assistant with memory of past conversations and user preferences.',
|
|
10
|
+
relevanceThreshold: 0.7,
|
|
11
|
+
includeMetadata: false,
|
|
12
|
+
memoryTypes: ['conversation', 'fact', 'preference', 'context'],
|
|
13
|
+
maxMemories: 10,
|
|
14
|
+
...config,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async buildContext(query, additionalConfig) {
|
|
18
|
+
const config = { ...this.config, ...additionalConfig };
|
|
19
|
+
const messages = [];
|
|
20
|
+
if (config.includeSystemPrompt) {
|
|
21
|
+
messages.push({
|
|
22
|
+
role: 'system',
|
|
23
|
+
content: config.systemPrompt,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const relevantMemories = await this.findRelevantMemories(query, config);
|
|
27
|
+
const contextContent = this.buildContextContent(relevantMemories, config);
|
|
28
|
+
if (contextContent) {
|
|
29
|
+
messages.push({
|
|
30
|
+
role: 'system',
|
|
31
|
+
content: contextContent,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const tokensEstimated = this.estimateTokens(messages);
|
|
35
|
+
const truncationApplied = tokensEstimated > config.maxTokens;
|
|
36
|
+
return {
|
|
37
|
+
messages,
|
|
38
|
+
memories: relevantMemories.map(r => r.memory),
|
|
39
|
+
stats: {
|
|
40
|
+
memoriesUsed: relevantMemories.length,
|
|
41
|
+
tokensEstimated,
|
|
42
|
+
truncationApplied,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
async findRelevantMemories(query, config) {
|
|
47
|
+
const searchQuery = {
|
|
48
|
+
text: query,
|
|
49
|
+
filter: {
|
|
50
|
+
types: config.memoryTypes,
|
|
51
|
+
minImportance: config.relevanceThreshold,
|
|
52
|
+
},
|
|
53
|
+
limit: config.maxMemories,
|
|
54
|
+
threshold: config.relevanceThreshold,
|
|
55
|
+
};
|
|
56
|
+
const results = await this.memoryManager.search(searchQuery);
|
|
57
|
+
return results.filter(r => r.score >= config.relevanceThreshold);
|
|
58
|
+
}
|
|
59
|
+
buildContextContent(memories, config) {
|
|
60
|
+
if (memories.length === 0)
|
|
61
|
+
return '';
|
|
62
|
+
const sections = [];
|
|
63
|
+
const groupedByType = this.groupByType(memories);
|
|
64
|
+
if (groupedByType.fact && groupedByType.fact.length > 0) {
|
|
65
|
+
const facts = groupedByType.fact
|
|
66
|
+
.map(r => `- ${r.memory.content}`)
|
|
67
|
+
.join('\n');
|
|
68
|
+
sections.push(`Key Facts:\n${facts}`);
|
|
69
|
+
}
|
|
70
|
+
if (groupedByType.preference && groupedByType.preference.length > 0) {
|
|
71
|
+
const prefs = groupedByType.preference
|
|
72
|
+
.map(r => `- ${r.memory.content}`)
|
|
73
|
+
.join('\n');
|
|
74
|
+
sections.push(`User Preferences:\n${prefs}`);
|
|
75
|
+
}
|
|
76
|
+
if (groupedByType.conversation && groupedByType.conversation.length > 0) {
|
|
77
|
+
const recentConversations = groupedByType.conversation
|
|
78
|
+
.slice(0, 5)
|
|
79
|
+
.map(r => r.memory.content)
|
|
80
|
+
.join('\n');
|
|
81
|
+
sections.push(`Recent Conversation Context:\n${recentConversations}`);
|
|
82
|
+
}
|
|
83
|
+
if (groupedByType.context && groupedByType.context.length > 0) {
|
|
84
|
+
const context = groupedByType.context
|
|
85
|
+
.map(r => `- ${r.memory.content}`)
|
|
86
|
+
.join('\n');
|
|
87
|
+
sections.push(`Additional Context:\n${context}`);
|
|
88
|
+
}
|
|
89
|
+
if (groupedByType.instruction && groupedByType.instruction.length > 0) {
|
|
90
|
+
const instructions = groupedByType.instruction
|
|
91
|
+
.map(r => `- ${r.memory.content}`)
|
|
92
|
+
.join('\n');
|
|
93
|
+
sections.push(`Important Instructions:\n${instructions}`);
|
|
94
|
+
}
|
|
95
|
+
let content = sections.join('\n\n');
|
|
96
|
+
if (config.includeMetadata) {
|
|
97
|
+
const metadataList = memories
|
|
98
|
+
.map(r => `[${r.memory.metadata.type}] ${r.memory.metadata.tags.join(', ')}`)
|
|
99
|
+
.join('\n');
|
|
100
|
+
content += `\n\nMemory Metadata:\n${metadataList}`;
|
|
101
|
+
}
|
|
102
|
+
return content;
|
|
103
|
+
}
|
|
104
|
+
groupByType(memories) {
|
|
105
|
+
const grouped = {
|
|
106
|
+
conversation: [],
|
|
107
|
+
fact: [],
|
|
108
|
+
preference: [],
|
|
109
|
+
instruction: [],
|
|
110
|
+
context: [],
|
|
111
|
+
custom: [],
|
|
112
|
+
};
|
|
113
|
+
for (const result of memories) {
|
|
114
|
+
const type = result.memory.metadata.type;
|
|
115
|
+
if (grouped[type]) {
|
|
116
|
+
grouped[type].push(result);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return grouped;
|
|
120
|
+
}
|
|
121
|
+
estimateTokens(messages) {
|
|
122
|
+
let total = 0;
|
|
123
|
+
for (const message of messages) {
|
|
124
|
+
const words = message.content.split(/\s+/).length;
|
|
125
|
+
total += Math.ceil(words * 1.3);
|
|
126
|
+
}
|
|
127
|
+
return total;
|
|
128
|
+
}
|
|
129
|
+
updateConfig(config) {
|
|
130
|
+
this.config = { ...this.config, ...config };
|
|
131
|
+
}
|
|
132
|
+
getConfig() {
|
|
133
|
+
return { ...this.config };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export function createContextBuilder(memoryManager, config) {
|
|
137
|
+
return new ContextBuilder(memoryManager, config);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=contextBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextBuilder.js","sourceRoot":"","sources":["../src/contextBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Memory, MemoryMetadata, SearchResult, ContextResult, MemoryStats, EmbeddingFunction } from './types';
|
|
2
|
+
import { AIMemoryConfig } from './config';
|
|
3
|
+
import { MemoryManager } from './memoryManager';
|
|
4
|
+
import { ContextBuilder } from './contextBuilder';
|
|
5
|
+
export { Memory, MemoryMetadata, MemoryType, SearchResult, MemoryQuery, MemoryFilter, MemoryStats, ContextConfig, ContextMessage, ContextResult, EmbeddingFunction, StorageAdapter, VectorStoreAdapter, VectorEntry, SearchOptions, } from './types';
|
|
6
|
+
export { AIMemoryConfig, DEFAULT_CONFIG, validateConfig, } from './config';
|
|
7
|
+
export { InMemoryVectorStore, VectorStoreFactory, } from './vectorStore';
|
|
8
|
+
export { MetadataStore, } from './metadataStore';
|
|
9
|
+
export { MemoryManager, createMemoryManager, } from './memoryManager';
|
|
10
|
+
export { ContextBuilder, createContextBuilder, } from './contextBuilder';
|
|
11
|
+
export { RateLimiter, RateLimitResult, RateLimitConfig, RateLimitStore, InMemoryRateLimitStore, createRateLimiter, DEFAULT_RATE_LIMITS, } from './rateLimiter';
|
|
12
|
+
export { UsageTracker, UsageLimits, UsageCheckResult, UsageMetric, UsageSummary, UsageStore, InMemoryUsageStore, createUsageTracker, DEFAULT_USAGE_LIMITS, } from './usageTracker';
|
|
13
|
+
export { PlanManager, PlanManager as AIMemoryPro, Plan, ExtensionPlan, TeamPlan, ProductPlan, ProductType, PlanConfig, PlanFeatures, PlanLimits, PLANS, getPlan, getPlanLimits, getAvailablePlans, createPlanManager, } from './planManager';
|
|
14
|
+
export { RedisRateLimitStore, PostgresUsageStore, RedisConfig, PostgresConfig, createRedisRateLimiter, createPostgresUsageStore, } from './storage';
|
|
15
|
+
export { LicenseManager, AIMemoryLicense, LicenseConfig, LicenseValidation, createLicenseManager, getLicenseManager, } from './licensing';
|
|
16
|
+
export declare class AIMemory {
|
|
17
|
+
private memoryManager;
|
|
18
|
+
private contextBuilder;
|
|
19
|
+
constructor(config?: Partial<AIMemoryConfig>);
|
|
20
|
+
setEmbeddingFunction(fn: EmbeddingFunction): void;
|
|
21
|
+
remember(content: string, metadata?: Partial<MemoryMetadata>): Promise<Memory>;
|
|
22
|
+
rememberConversation(content: string, role: 'user' | 'assistant', metadata?: Partial<MemoryMetadata>): Promise<Memory>;
|
|
23
|
+
rememberFact(content: string, metadata?: Partial<MemoryMetadata>): Promise<Memory>;
|
|
24
|
+
rememberPreference(content: string, metadata?: Partial<MemoryMetadata>): Promise<Memory>;
|
|
25
|
+
rememberInstruction(content: string, metadata?: Partial<MemoryMetadata>): Promise<Memory>;
|
|
26
|
+
recall(query: string, options?: {
|
|
27
|
+
limit?: number;
|
|
28
|
+
threshold?: number;
|
|
29
|
+
}): Promise<SearchResult[]>;
|
|
30
|
+
getContext(query: string): Promise<ContextResult>;
|
|
31
|
+
getMemory(id: string): Promise<Memory | null>;
|
|
32
|
+
updateMemory(id: string, updates: Partial<Memory>): Promise<Memory | null>;
|
|
33
|
+
forget(id: string): Promise<void>;
|
|
34
|
+
getRecentMemories(limit?: number): Promise<Memory[]>;
|
|
35
|
+
getStats(): Promise<MemoryStats>;
|
|
36
|
+
clear(): Promise<void>;
|
|
37
|
+
cleanup(): Promise<number>;
|
|
38
|
+
exportData(): Promise<Memory[]>;
|
|
39
|
+
importData(memories: Memory[]): Promise<void>;
|
|
40
|
+
getMemoryManager(): MemoryManager;
|
|
41
|
+
getContextBuilder(): ContextBuilder;
|
|
42
|
+
}
|
|
43
|
+
export declare function createAIMemory(config?: Partial<AIMemoryConfig>): AIMemory;
|
|
44
|
+
export { createAIMemory as createAIBrain };
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { validateConfig } from './config';
|
|
2
|
+
import { MemoryManager } from './memoryManager';
|
|
3
|
+
import { ContextBuilder } from './contextBuilder';
|
|
4
|
+
export { DEFAULT_CONFIG, validateConfig, } from './config';
|
|
5
|
+
export { InMemoryVectorStore, VectorStoreFactory, } from './vectorStore';
|
|
6
|
+
export { MetadataStore, } from './metadataStore';
|
|
7
|
+
export { MemoryManager, createMemoryManager, } from './memoryManager';
|
|
8
|
+
export { ContextBuilder, createContextBuilder, } from './contextBuilder';
|
|
9
|
+
export { RateLimiter, InMemoryRateLimitStore, createRateLimiter, DEFAULT_RATE_LIMITS, } from './rateLimiter';
|
|
10
|
+
export { UsageTracker, InMemoryUsageStore, createUsageTracker, DEFAULT_USAGE_LIMITS, } from './usageTracker';
|
|
11
|
+
export { PlanManager, PlanManager as AIMemoryPro, PLANS, getPlan, getPlanLimits, getAvailablePlans, createPlanManager, } from './planManager';
|
|
12
|
+
export { RedisRateLimitStore, PostgresUsageStore, createRedisRateLimiter, createPostgresUsageStore, } from './storage';
|
|
13
|
+
export { LicenseManager, createLicenseManager, getLicenseManager, } from './licensing';
|
|
14
|
+
export class AIMemory {
|
|
15
|
+
memoryManager;
|
|
16
|
+
contextBuilder;
|
|
17
|
+
constructor(config) {
|
|
18
|
+
const validatedConfig = validateConfig(config || {});
|
|
19
|
+
this.memoryManager = new MemoryManager(validatedConfig);
|
|
20
|
+
this.contextBuilder = new ContextBuilder(this.memoryManager, validatedConfig.context);
|
|
21
|
+
}
|
|
22
|
+
setEmbeddingFunction(fn) {
|
|
23
|
+
this.memoryManager.setEmbeddingFunction(fn);
|
|
24
|
+
}
|
|
25
|
+
async remember(content, metadata) {
|
|
26
|
+
return this.memoryManager.addMemory(content, metadata);
|
|
27
|
+
}
|
|
28
|
+
async rememberConversation(content, role, metadata) {
|
|
29
|
+
return this.memoryManager.addConversation(content, role, metadata);
|
|
30
|
+
}
|
|
31
|
+
async rememberFact(content, metadata) {
|
|
32
|
+
return this.memoryManager.addFact(content, metadata);
|
|
33
|
+
}
|
|
34
|
+
async rememberPreference(content, metadata) {
|
|
35
|
+
return this.memoryManager.addPreference(content, metadata);
|
|
36
|
+
}
|
|
37
|
+
async rememberInstruction(content, metadata) {
|
|
38
|
+
return this.memoryManager.addInstruction(content, metadata);
|
|
39
|
+
}
|
|
40
|
+
async recall(query, options) {
|
|
41
|
+
return this.memoryManager.search({
|
|
42
|
+
text: query,
|
|
43
|
+
limit: options?.limit || 10,
|
|
44
|
+
threshold: options?.threshold,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async getContext(query) {
|
|
48
|
+
return this.contextBuilder.buildContext(query);
|
|
49
|
+
}
|
|
50
|
+
async getMemory(id) {
|
|
51
|
+
return this.memoryManager.getMemory(id);
|
|
52
|
+
}
|
|
53
|
+
async updateMemory(id, updates) {
|
|
54
|
+
return this.memoryManager.updateMemory(id, updates);
|
|
55
|
+
}
|
|
56
|
+
async forget(id) {
|
|
57
|
+
return this.memoryManager.deleteMemory(id);
|
|
58
|
+
}
|
|
59
|
+
async getRecentMemories(limit) {
|
|
60
|
+
return this.memoryManager.getRecentMemories(limit);
|
|
61
|
+
}
|
|
62
|
+
async getStats() {
|
|
63
|
+
return this.memoryManager.getStats();
|
|
64
|
+
}
|
|
65
|
+
async clear() {
|
|
66
|
+
return this.memoryManager.clear();
|
|
67
|
+
}
|
|
68
|
+
async cleanup() {
|
|
69
|
+
return this.memoryManager.cleanup();
|
|
70
|
+
}
|
|
71
|
+
async exportData() {
|
|
72
|
+
return this.memoryManager.exportData();
|
|
73
|
+
}
|
|
74
|
+
async importData(memories) {
|
|
75
|
+
return this.memoryManager.importData(memories);
|
|
76
|
+
}
|
|
77
|
+
getMemoryManager() {
|
|
78
|
+
return this.memoryManager;
|
|
79
|
+
}
|
|
80
|
+
getContextBuilder() {
|
|
81
|
+
return this.contextBuilder;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export function createAIMemory(config) {
|
|
85
|
+
return new AIMemory(config);
|
|
86
|
+
}
|
|
87
|
+
export { createAIMemory as createAIBrain };
|
|
88
|
+
//# sourceMappingURL=index.js.map
|