universal-agent-memory 0.6.3 → 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/dist/benchmarks/benchmark.d.ts +12 -12
- package/dist/benchmarks/execution-verifier.d.ts.map +1 -1
- package/dist/benchmarks/execution-verifier.js +51 -10
- package/dist/benchmarks/execution-verifier.js.map +1 -1
- package/dist/bin/cli.js +4 -1
- package/dist/bin/cli.js.map +1 -1
- package/dist/cli/update.d.ts +3 -0
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +136 -11
- package/dist/cli/update.js.map +1 -1
- package/dist/index.d.ts +17 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/backends/qdrant-cloud.d.ts +12 -1
- package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -1
- package/dist/memory/backends/qdrant-cloud.js +39 -3
- package/dist/memory/backends/qdrant-cloud.js.map +1 -1
- package/dist/memory/context-compressor.d.ts +66 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js +250 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/dynamic-retrieval.d.ts +62 -1
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -1
- package/dist/memory/dynamic-retrieval.js +154 -32
- package/dist/memory/dynamic-retrieval.js.map +1 -1
- package/dist/memory/embeddings.d.ts +38 -4
- package/dist/memory/embeddings.d.ts.map +1 -1
- package/dist/memory/embeddings.js +173 -9
- package/dist/memory/embeddings.js.map +1 -1
- package/dist/memory/hierarchical-memory.d.ts +116 -0
- package/dist/memory/hierarchical-memory.d.ts.map +1 -0
- package/dist/memory/hierarchical-memory.js +299 -0
- package/dist/memory/hierarchical-memory.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +124 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +514 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/multi-view-memory.d.ts +134 -0
- package/dist/memory/multi-view-memory.d.ts.map +1 -0
- package/dist/memory/multi-view-memory.js +420 -0
- package/dist/memory/multi-view-memory.js.map +1 -0
- package/dist/memory/semantic-compression.d.ts +77 -0
- package/dist/memory/semantic-compression.d.ts.map +1 -0
- package/dist/memory/semantic-compression.js +344 -0
- package/dist/memory/semantic-compression.js.map +1 -0
- package/dist/memory/speculative-cache.d.ts +92 -0
- package/dist/memory/speculative-cache.d.ts.map +1 -0
- package/dist/memory/speculative-cache.js +261 -0
- package/dist/memory/speculative-cache.js.map +1 -0
- package/package.json +1 -1
|
@@ -3,14 +3,17 @@ import { getEmbeddingService } from '../embeddings.js';
|
|
|
3
3
|
export class QdrantCloudBackend {
|
|
4
4
|
client;
|
|
5
5
|
collection;
|
|
6
|
+
vectorSize;
|
|
7
|
+
collectionVerified = false;
|
|
6
8
|
constructor(config) {
|
|
7
9
|
const apiKey = config.apiKey || process.env.QDRANT_API_KEY;
|
|
8
10
|
const url = config.url || process.env.QDRANT_URL;
|
|
9
|
-
if (!url
|
|
10
|
-
throw new Error('Qdrant
|
|
11
|
+
if (!url) {
|
|
12
|
+
throw new Error('Qdrant URL required (QDRANT_URL env var or config)');
|
|
11
13
|
}
|
|
12
14
|
this.client = new QdrantClient({ url, apiKey });
|
|
13
15
|
this.collection = config.collection;
|
|
16
|
+
this.vectorSize = config.vectorSize || 768; // Default to Ollama's nomic-embed-text size
|
|
14
17
|
}
|
|
15
18
|
async isConfigured() {
|
|
16
19
|
try {
|
|
@@ -101,13 +104,46 @@ export class QdrantCloudBackend {
|
|
|
101
104
|
return ids.length;
|
|
102
105
|
}
|
|
103
106
|
async ensureCollection() {
|
|
107
|
+
if (this.collectionVerified)
|
|
108
|
+
return;
|
|
104
109
|
const collections = await this.client.getCollections();
|
|
105
110
|
const exists = collections.collections.some((c) => c.name === this.collection);
|
|
106
111
|
if (!exists) {
|
|
112
|
+
// Create collection with correct vector size
|
|
107
113
|
await this.client.createCollection(this.collection, {
|
|
108
|
-
vectors: { size:
|
|
114
|
+
vectors: { size: this.vectorSize, distance: 'Cosine' },
|
|
109
115
|
});
|
|
116
|
+
this.collectionVerified = true;
|
|
117
|
+
return;
|
|
110
118
|
}
|
|
119
|
+
// Check if existing collection has correct dimensions
|
|
120
|
+
const collectionInfo = await this.client.getCollection(this.collection);
|
|
121
|
+
const currentSize = collectionInfo.config?.params?.vectors?.size;
|
|
122
|
+
if (currentSize && currentSize !== this.vectorSize) {
|
|
123
|
+
// Create new collection with correct dimensions (append suffix)
|
|
124
|
+
const newCollectionName = `${this.collection}_v${this.vectorSize}`;
|
|
125
|
+
const newExists = collections.collections.some((c) => c.name === newCollectionName);
|
|
126
|
+
if (!newExists) {
|
|
127
|
+
await this.client.createCollection(newCollectionName, {
|
|
128
|
+
vectors: { size: this.vectorSize, distance: 'Cosine' },
|
|
129
|
+
});
|
|
130
|
+
console.log(`[Qdrant] Created new collection ${newCollectionName} with ${this.vectorSize} dimensions`);
|
|
131
|
+
}
|
|
132
|
+
this.collection = newCollectionName;
|
|
133
|
+
}
|
|
134
|
+
this.collectionVerified = true;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get the actual collection name being used (may differ from config if dimension mismatch)
|
|
138
|
+
*/
|
|
139
|
+
getCollectionName() {
|
|
140
|
+
return this.collection;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get vector dimensions
|
|
144
|
+
*/
|
|
145
|
+
getVectorSize() {
|
|
146
|
+
return this.vectorSize;
|
|
111
147
|
}
|
|
112
148
|
}
|
|
113
149
|
//# sourceMappingURL=qdrant-cloud.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qdrant-cloud.js","sourceRoot":"","sources":["../../../src/memory/backends/qdrant-cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"qdrant-cloud.js","sourceRoot":"","sources":["../../../src/memory/backends/qdrant-cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Compression Module for UAM
|
|
3
|
+
*
|
|
4
|
+
* Implements semantic compression to reduce token usage while preserving meaning.
|
|
5
|
+
* Based on Acon (Agent Context Optimization) and AgentCompress research.
|
|
6
|
+
*/
|
|
7
|
+
export interface CompressionResult {
|
|
8
|
+
original: string;
|
|
9
|
+
compressed: string;
|
|
10
|
+
originalTokens: number;
|
|
11
|
+
compressedTokens: number;
|
|
12
|
+
tokenReduction: number;
|
|
13
|
+
preservedSemantics: number;
|
|
14
|
+
}
|
|
15
|
+
export interface CompressorConfig {
|
|
16
|
+
maxTokens: number;
|
|
17
|
+
minSemanticPreservation: number;
|
|
18
|
+
compressionLevel: 'light' | 'medium' | 'aggressive';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Estimate token count (rough approximation: ~4 chars per token)
|
|
22
|
+
*/
|
|
23
|
+
export declare function estimateTokens(text: string): number;
|
|
24
|
+
/**
|
|
25
|
+
* Compress a single memory entry
|
|
26
|
+
*/
|
|
27
|
+
export declare function compressMemoryEntry(content: string, config?: Partial<CompressorConfig>): CompressionResult;
|
|
28
|
+
/**
|
|
29
|
+
* Compress multiple memories into a consolidated context
|
|
30
|
+
*/
|
|
31
|
+
export declare function compressMemoryBatch(memories: Array<{
|
|
32
|
+
content: string;
|
|
33
|
+
type: string;
|
|
34
|
+
importance?: number;
|
|
35
|
+
}>, config?: Partial<CompressorConfig>): CompressionResult;
|
|
36
|
+
/**
|
|
37
|
+
* Summarize old memories into a single compressed entry
|
|
38
|
+
*/
|
|
39
|
+
export declare function summarizeMemories(memories: Array<{
|
|
40
|
+
content: string;
|
|
41
|
+
timestamp: string;
|
|
42
|
+
type: string;
|
|
43
|
+
}>, maxOutputTokens?: number): string;
|
|
44
|
+
/**
|
|
45
|
+
* Context budget manager
|
|
46
|
+
*/
|
|
47
|
+
export declare class ContextBudget {
|
|
48
|
+
private maxTokens;
|
|
49
|
+
private usedTokens;
|
|
50
|
+
private sections;
|
|
51
|
+
constructor(maxTokens?: number);
|
|
52
|
+
allocate(section: string, content: string): {
|
|
53
|
+
content: string;
|
|
54
|
+
tokens: number;
|
|
55
|
+
truncated: boolean;
|
|
56
|
+
};
|
|
57
|
+
remaining(): number;
|
|
58
|
+
usage(): {
|
|
59
|
+
total: number;
|
|
60
|
+
used: number;
|
|
61
|
+
remaining: number;
|
|
62
|
+
sections: Record<string, number>;
|
|
63
|
+
};
|
|
64
|
+
reset(): void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=context-compressor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compressor.d.ts","sourceRoot":"","sources":["../../src/memory/context-compressor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC;CACrD;AAQD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAAG,iBAAiB,CAqE9G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACvE,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACrC,iBAAiB,CA+CnB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACrE,eAAe,GAAE,MAAY,GAC5B,MAAM,CAoCR;AAgED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAkC;gBAEtC,SAAS,GAAE,MAAc;IAIrC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;IAsBnG,SAAS,IAAI,MAAM;IAInB,KAAK,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAS7F,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Compression Module for UAM
|
|
3
|
+
*
|
|
4
|
+
* Implements semantic compression to reduce token usage while preserving meaning.
|
|
5
|
+
* Based on Acon (Agent Context Optimization) and AgentCompress research.
|
|
6
|
+
*/
|
|
7
|
+
const DEFAULT_CONFIG = {
|
|
8
|
+
maxTokens: 2000,
|
|
9
|
+
minSemanticPreservation: 0.85,
|
|
10
|
+
compressionLevel: 'medium',
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Estimate token count (rough approximation: ~4 chars per token)
|
|
14
|
+
*/
|
|
15
|
+
export function estimateTokens(text) {
|
|
16
|
+
return Math.ceil(text.length / 4);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Compress a single memory entry
|
|
20
|
+
*/
|
|
21
|
+
export function compressMemoryEntry(content, config = {}) {
|
|
22
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
23
|
+
const originalTokens = estimateTokens(content);
|
|
24
|
+
if (originalTokens <= cfg.maxTokens / 4) {
|
|
25
|
+
return {
|
|
26
|
+
original: content,
|
|
27
|
+
compressed: content,
|
|
28
|
+
originalTokens,
|
|
29
|
+
compressedTokens: originalTokens,
|
|
30
|
+
tokenReduction: 0,
|
|
31
|
+
preservedSemantics: 1.0,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
let compressed = content;
|
|
35
|
+
// Level 1: Remove redundant whitespace and formatting
|
|
36
|
+
compressed = compressed.replace(/\s+/g, ' ').trim();
|
|
37
|
+
compressed = compressed.replace(/\n{3,}/g, '\n\n');
|
|
38
|
+
// Level 2: Remove common filler phrases
|
|
39
|
+
if (cfg.compressionLevel !== 'light') {
|
|
40
|
+
const fillerPatterns = [
|
|
41
|
+
/\b(basically|essentially|actually|really|very|quite|somewhat|rather)\b/gi,
|
|
42
|
+
/\b(in order to)\b/gi,
|
|
43
|
+
/\b(it is worth noting that|it should be noted that)\b/gi,
|
|
44
|
+
/\b(as a matter of fact|in fact)\b/gi,
|
|
45
|
+
/\b(at the end of the day)\b/gi,
|
|
46
|
+
/\b(the fact that)\b/gi,
|
|
47
|
+
/\b(in this case|in that case)\b/gi,
|
|
48
|
+
];
|
|
49
|
+
for (const pattern of fillerPatterns) {
|
|
50
|
+
compressed = compressed.replace(pattern, '');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Level 3: Aggressive - truncate to key sentences
|
|
54
|
+
if (cfg.compressionLevel === 'aggressive') {
|
|
55
|
+
const sentences = compressed.split(/(?<=[.!?])\s+/);
|
|
56
|
+
const maxSentences = Math.max(3, Math.ceil(sentences.length * 0.4));
|
|
57
|
+
// Keep first sentence (context), middle sentences (key info), last sentence (conclusion)
|
|
58
|
+
if (sentences.length > maxSentences) {
|
|
59
|
+
const first = sentences.slice(0, 1);
|
|
60
|
+
const middle = sentences.slice(1, -1).slice(0, maxSentences - 2);
|
|
61
|
+
const last = sentences.slice(-1);
|
|
62
|
+
compressed = [...first, ...middle, ...last].join(' ');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Clean up artifacts
|
|
66
|
+
compressed = compressed.replace(/\s{2,}/g, ' ').trim();
|
|
67
|
+
const compressedTokens = estimateTokens(compressed);
|
|
68
|
+
const tokenReduction = 1 - (compressedTokens / originalTokens);
|
|
69
|
+
// Estimate semantic preservation (based on compression ratio - rough heuristic)
|
|
70
|
+
const preservedSemantics = Math.max(0.7, 1 - (tokenReduction * 0.3));
|
|
71
|
+
return {
|
|
72
|
+
original: content,
|
|
73
|
+
compressed,
|
|
74
|
+
originalTokens,
|
|
75
|
+
compressedTokens,
|
|
76
|
+
tokenReduction,
|
|
77
|
+
preservedSemantics,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Compress multiple memories into a consolidated context
|
|
82
|
+
*/
|
|
83
|
+
export function compressMemoryBatch(memories, config = {}) {
|
|
84
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
85
|
+
// Sort by importance (descending)
|
|
86
|
+
const sorted = [...memories].sort((a, b) => (b.importance || 5) - (a.importance || 5));
|
|
87
|
+
// Group by type for structured output
|
|
88
|
+
const grouped = {};
|
|
89
|
+
for (const mem of sorted) {
|
|
90
|
+
const type = mem.type || 'general';
|
|
91
|
+
if (!grouped[type])
|
|
92
|
+
grouped[type] = [];
|
|
93
|
+
grouped[type].push(mem.content);
|
|
94
|
+
}
|
|
95
|
+
// Build consolidated context
|
|
96
|
+
const sections = [];
|
|
97
|
+
const typeOrder = ['goal', 'action', 'observation', 'thought'];
|
|
98
|
+
for (const type of typeOrder) {
|
|
99
|
+
if (grouped[type] && grouped[type].length > 0) {
|
|
100
|
+
const compressed = grouped[type].map(c => compressMemoryEntry(c, cfg).compressed);
|
|
101
|
+
sections.push(`[${type.toUpperCase()}]\n${compressed.join('\n')}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Add remaining types
|
|
105
|
+
for (const type of Object.keys(grouped)) {
|
|
106
|
+
if (!typeOrder.includes(type)) {
|
|
107
|
+
const compressed = grouped[type].map(c => compressMemoryEntry(c, cfg).compressed);
|
|
108
|
+
sections.push(`[${type.toUpperCase()}]\n${compressed.join('\n')}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const original = memories.map(m => m.content).join('\n');
|
|
112
|
+
const compressed = sections.join('\n\n');
|
|
113
|
+
const originalTokens = estimateTokens(original);
|
|
114
|
+
const compressedTokens = estimateTokens(compressed);
|
|
115
|
+
return {
|
|
116
|
+
original,
|
|
117
|
+
compressed,
|
|
118
|
+
originalTokens,
|
|
119
|
+
compressedTokens,
|
|
120
|
+
tokenReduction: 1 - (compressedTokens / originalTokens),
|
|
121
|
+
preservedSemantics: 0.9, // Batch compression preserves structure
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Summarize old memories into a single compressed entry
|
|
126
|
+
*/
|
|
127
|
+
export function summarizeMemories(memories, maxOutputTokens = 500) {
|
|
128
|
+
if (memories.length === 0)
|
|
129
|
+
return '';
|
|
130
|
+
// Group by type
|
|
131
|
+
const byType = {};
|
|
132
|
+
for (const mem of memories) {
|
|
133
|
+
if (!byType[mem.type])
|
|
134
|
+
byType[mem.type] = [];
|
|
135
|
+
byType[mem.type].push(mem.content);
|
|
136
|
+
}
|
|
137
|
+
// Create summary sections
|
|
138
|
+
const summaryParts = [];
|
|
139
|
+
for (const [type, contents] of Object.entries(byType)) {
|
|
140
|
+
// Deduplicate similar content
|
|
141
|
+
const unique = deduplicateContent(contents);
|
|
142
|
+
// Compress each unique entry
|
|
143
|
+
const compressed = unique.map(c => {
|
|
144
|
+
const result = compressMemoryEntry(c, { compressionLevel: 'aggressive' });
|
|
145
|
+
return result.compressed;
|
|
146
|
+
});
|
|
147
|
+
// Limit to most important entries
|
|
148
|
+
const maxPerType = Math.max(2, Math.floor(maxOutputTokens / (Object.keys(byType).length * 50)));
|
|
149
|
+
const limited = compressed.slice(0, maxPerType);
|
|
150
|
+
if (limited.length > 0) {
|
|
151
|
+
summaryParts.push(`${type}: ${limited.join('; ')}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const dateRange = getDateRange(memories.map(m => m.timestamp));
|
|
155
|
+
const header = `[Summary ${dateRange}]`;
|
|
156
|
+
return `${header}\n${summaryParts.join('\n')}`;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Deduplicate content using simple similarity check
|
|
160
|
+
*/
|
|
161
|
+
function deduplicateContent(contents, threshold = 0.8) {
|
|
162
|
+
const unique = [];
|
|
163
|
+
for (const content of contents) {
|
|
164
|
+
const normalizedNew = content.toLowerCase().replace(/\s+/g, ' ').trim();
|
|
165
|
+
let isDuplicate = false;
|
|
166
|
+
for (const existing of unique) {
|
|
167
|
+
const normalizedExisting = existing.toLowerCase().replace(/\s+/g, ' ').trim();
|
|
168
|
+
const similarity = jaccardSimilarity(normalizedNew, normalizedExisting);
|
|
169
|
+
if (similarity > threshold) {
|
|
170
|
+
isDuplicate = true;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (!isDuplicate) {
|
|
175
|
+
unique.push(content);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return unique;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Calculate Jaccard similarity between two strings
|
|
182
|
+
*/
|
|
183
|
+
function jaccardSimilarity(a, b) {
|
|
184
|
+
const setA = new Set(a.split(/\s+/));
|
|
185
|
+
const setB = new Set(b.split(/\s+/));
|
|
186
|
+
const intersection = new Set([...setA].filter(x => setB.has(x)));
|
|
187
|
+
const union = new Set([...setA, ...setB]);
|
|
188
|
+
return intersection.size / union.size;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get date range string
|
|
192
|
+
*/
|
|
193
|
+
function getDateRange(timestamps) {
|
|
194
|
+
if (timestamps.length === 0)
|
|
195
|
+
return 'unknown';
|
|
196
|
+
const dates = timestamps.map(t => new Date(t)).filter(d => !isNaN(d.getTime()));
|
|
197
|
+
if (dates.length === 0)
|
|
198
|
+
return 'unknown';
|
|
199
|
+
const min = new Date(Math.min(...dates.map(d => d.getTime())));
|
|
200
|
+
const max = new Date(Math.max(...dates.map(d => d.getTime())));
|
|
201
|
+
const formatDate = (d) => d.toISOString().split('T')[0];
|
|
202
|
+
if (formatDate(min) === formatDate(max)) {
|
|
203
|
+
return formatDate(min);
|
|
204
|
+
}
|
|
205
|
+
return `${formatDate(min)} to ${formatDate(max)}`;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Context budget manager
|
|
209
|
+
*/
|
|
210
|
+
export class ContextBudget {
|
|
211
|
+
maxTokens;
|
|
212
|
+
usedTokens = 0;
|
|
213
|
+
sections = new Map();
|
|
214
|
+
constructor(maxTokens = 12000) {
|
|
215
|
+
this.maxTokens = maxTokens;
|
|
216
|
+
}
|
|
217
|
+
allocate(section, content) {
|
|
218
|
+
const tokens = estimateTokens(content);
|
|
219
|
+
const available = this.maxTokens - this.usedTokens;
|
|
220
|
+
if (tokens <= available) {
|
|
221
|
+
this.usedTokens += tokens;
|
|
222
|
+
this.sections.set(section, tokens);
|
|
223
|
+
return { content, tokens, truncated: false };
|
|
224
|
+
}
|
|
225
|
+
// Need to truncate
|
|
226
|
+
const targetTokens = Math.floor(available * 0.9);
|
|
227
|
+
const targetChars = targetTokens * 4;
|
|
228
|
+
const truncated = content.slice(0, targetChars) + '... [truncated]';
|
|
229
|
+
const actualTokens = estimateTokens(truncated);
|
|
230
|
+
this.usedTokens += actualTokens;
|
|
231
|
+
this.sections.set(section, actualTokens);
|
|
232
|
+
return { content: truncated, tokens: actualTokens, truncated: true };
|
|
233
|
+
}
|
|
234
|
+
remaining() {
|
|
235
|
+
return this.maxTokens - this.usedTokens;
|
|
236
|
+
}
|
|
237
|
+
usage() {
|
|
238
|
+
return {
|
|
239
|
+
total: this.maxTokens,
|
|
240
|
+
used: this.usedTokens,
|
|
241
|
+
remaining: this.remaining(),
|
|
242
|
+
sections: Object.fromEntries(this.sections),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
reset() {
|
|
246
|
+
this.usedTokens = 0;
|
|
247
|
+
this.sections.clear();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=context-compressor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-compressor.js","sourceRoot":"","sources":["../../src/memory/context-compressor.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,54 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Retrieves relevant memories based on task content, not static context.
|
|
5
5
|
* Implements semantic search with fallback to keyword matching.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Adaptive retrieval depth based on query complexity
|
|
9
|
+
* - Context budget management to prevent overflow
|
|
10
|
+
* - Speculative prefetch for common patterns
|
|
6
11
|
*/
|
|
7
12
|
import { type TaskClassification } from './task-classifier.js';
|
|
13
|
+
/**
|
|
14
|
+
* Query complexity levels for adaptive retrieval
|
|
15
|
+
*/
|
|
16
|
+
export type QueryComplexity = 'simple' | 'moderate' | 'complex';
|
|
17
|
+
/**
|
|
18
|
+
* Retrieval depth configuration
|
|
19
|
+
*/
|
|
20
|
+
export interface RetrievalDepthConfig {
|
|
21
|
+
simple: {
|
|
22
|
+
shortTerm: number;
|
|
23
|
+
sessionMem: number;
|
|
24
|
+
longTerm: number;
|
|
25
|
+
patterns: number;
|
|
26
|
+
};
|
|
27
|
+
moderate: {
|
|
28
|
+
shortTerm: number;
|
|
29
|
+
sessionMem: number;
|
|
30
|
+
longTerm: number;
|
|
31
|
+
patterns: number;
|
|
32
|
+
};
|
|
33
|
+
complex: {
|
|
34
|
+
shortTerm: number;
|
|
35
|
+
sessionMem: number;
|
|
36
|
+
longTerm: number;
|
|
37
|
+
patterns: number;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Measure query complexity to determine retrieval depth
|
|
42
|
+
* Based on SimpleMem's adaptive query-aware retrieval
|
|
43
|
+
*/
|
|
44
|
+
export declare function measureQueryComplexity(query: string): QueryComplexity;
|
|
45
|
+
/**
|
|
46
|
+
* Get retrieval limits based on query complexity
|
|
47
|
+
*/
|
|
48
|
+
export declare function getRetrievalDepth(complexity: QueryComplexity, config?: RetrievalDepthConfig): {
|
|
49
|
+
shortTerm: number;
|
|
50
|
+
sessionMem: number;
|
|
51
|
+
longTerm: number;
|
|
52
|
+
patterns: number;
|
|
53
|
+
};
|
|
8
54
|
export interface RetrievedMemory {
|
|
9
55
|
content: string;
|
|
10
56
|
type: 'lesson' | 'gotcha' | 'pattern' | 'context' | 'example';
|
|
@@ -18,9 +64,24 @@ export interface DynamicMemoryContext {
|
|
|
18
64
|
gotchas: string[];
|
|
19
65
|
projectContext: string;
|
|
20
66
|
formattedContext: string;
|
|
67
|
+
queryComplexity: QueryComplexity;
|
|
68
|
+
tokenBudget: {
|
|
69
|
+
used: number;
|
|
70
|
+
remaining: number;
|
|
71
|
+
total: number;
|
|
72
|
+
};
|
|
73
|
+
compressionStats?: {
|
|
74
|
+
ratio: number;
|
|
75
|
+
sourceTokens: number;
|
|
76
|
+
compressedTokens: number;
|
|
77
|
+
};
|
|
21
78
|
}
|
|
22
79
|
/**
|
|
23
80
|
* Main function to retrieve task-specific memory context
|
|
81
|
+
* Now with adaptive retrieval depth and context budget management
|
|
24
82
|
*/
|
|
25
|
-
export declare function retrieveDynamicMemoryContext(taskInstruction: string, projectRoot?: string
|
|
83
|
+
export declare function retrieveDynamicMemoryContext(taskInstruction: string, projectRoot?: string, options?: {
|
|
84
|
+
maxTokens?: number;
|
|
85
|
+
useSemanticCompression?: boolean;
|
|
86
|
+
}): Promise<DynamicMemoryContext>;
|
|
26
87
|
//# sourceMappingURL=dynamic-retrieval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-retrieval.d.ts","sourceRoot":"","sources":["../../src/memory/dynamic-retrieval.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dynamic-retrieval.d.ts","sourceRoot":"","sources":["../../src/memory/dynamic-retrieval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAgE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI7H;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACxF;AAQD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAiDrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,eAAe,EAC3B,MAAM,GAAE,oBAA+C,GACtD;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAE/E;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,kBAAkB,CAAC;IACnC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,gBAAgB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CACtF;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,eAAe,EAAE,MAAM,EACvB,WAAW,GAAE,MAAsB,EACnC,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC7B,GACL,OAAO,CAAC,oBAAoB,CAAC,CAuG/B"}
|