memo-grafter 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -187
- package/USER_GUIDE.md +104 -13
- package/dist/MemoGrafter.d.ts +2 -0
- package/dist/MemoGrafter.d.ts.map +1 -1
- package/dist/MemoGrafter.js +15 -0
- package/dist/MemoGrafter.js.map +1 -1
- package/dist/MemoGrafterAgent.d.ts +2 -0
- package/dist/MemoGrafterAgent.d.ts.map +1 -1
- package/dist/MemoGrafterAgent.js +29 -12
- package/dist/MemoGrafterAgent.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/GrafterPipeline.d.ts +7 -1
- package/dist/pipeline/GrafterPipeline.d.ts.map +1 -1
- package/dist/pipeline/GrafterPipeline.js +5 -1
- package/dist/pipeline/GrafterPipeline.js.map +1 -1
- package/dist/pipeline/IngestPipeline.d.ts +12 -1
- package/dist/pipeline/IngestPipeline.d.ts.map +1 -1
- package/dist/pipeline/IngestPipeline.js +9 -1
- package/dist/pipeline/IngestPipeline.js.map +1 -1
- package/dist/pipeline/RetrieverPipeline.d.ts +14 -1
- package/dist/pipeline/RetrieverPipeline.d.ts.map +1 -1
- package/dist/pipeline/RetrieverPipeline.js +35 -2
- package/dist/pipeline/RetrieverPipeline.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/drift/driftScore.d.ts.map +1 -1
- package/dist/utils/drift/driftScore.js +2 -1
- package/dist/utils/drift/driftScore.js.map +1 -1
- package/dist/utils/reentry/reentryText.d.ts.map +1 -1
- package/dist/utils/reentry/reentryText.js +2 -2
- package/dist/utils/reentry/reentryText.js.map +1 -1
- package/dist/utils/text/tokenCount.d.ts +1 -0
- package/dist/utils/text/tokenCount.d.ts.map +1 -1
- package/dist/utils/text/tokenCount.js +3 -0
- package/dist/utils/text/tokenCount.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,187 +1,73 @@
|
|
|
1
|
-
# MemoGrafter
|
|
2
|
-
[](https://www.npmjs.com/package/memo-grafter)
|
|
3
|
-
|
|
4
|
-
Structured memory for TypeScript chatbots.
|
|
5
|
-
|
|
6
|
-
MemoGrafter helps chatbot applications remember conversations without stuffing every old message back into the prompt. It turns
|
|
7
|
-
|
|
8
|
-
It is a memory framework, not an autonomous agent runtime. It does not run tools, schedule
|
|
9
|
-
|
|
10
|
-
## What
|
|
11
|
-
|
|
12
|
-
- Chatbots that
|
|
13
|
-
-
|
|
14
|
-
- Multi-chatbot
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
->
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
console.log(recall.facts);
|
|
77
|
-
console.log(recall.systemPrompt);
|
|
78
|
-
|
|
79
|
-
await agent.close();
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Adapters
|
|
83
|
-
|
|
84
|
-
MemoGrafter includes provider adapters such as `OpenAILLMAdapter`, `OpenAIEmbedAdapter`, `AnthropicLLMAdapter`, `GeminiLLMAdapter`, and `GeminiEmbedAdapter`. You can also bring any provider by implementing the public adapter interfaces:
|
|
85
|
-
|
|
86
|
-
```ts
|
|
87
|
-
import {
|
|
88
|
-
type EmbedAdapter,
|
|
89
|
-
type LLMAdapter,
|
|
90
|
-
type Message,
|
|
91
|
-
} from "memo-grafter";
|
|
92
|
-
|
|
93
|
-
class MyLLMAdapter implements LLMAdapter {
|
|
94
|
-
async complete(messages: Message[], system?: string): Promise<string> {
|
|
95
|
-
// Call your model provider here.
|
|
96
|
-
return "Assistant response";
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
class MyEmbedAdapter implements EmbedAdapter {
|
|
101
|
-
async embed(text: string): Promise<number[]> {
|
|
102
|
-
// Return an embedding vector matching your storage schema.
|
|
103
|
-
return [];
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Storage
|
|
109
|
-
|
|
110
|
-
MemoGrafter uses a public `GraphStore` interface internally. The default implementation is `PostgresGraphStore`, backed by PostgreSQL and `pgvector`, and this is what `MemoGrafter` and `MemoGrafterAgent` construct from the `db.connectionString` config today.
|
|
111
|
-
|
|
112
|
-
```ts
|
|
113
|
-
import {
|
|
114
|
-
PostgresGraphStore,
|
|
115
|
-
type GraphStore,
|
|
116
|
-
} from "memo-grafter";
|
|
117
|
-
|
|
118
|
-
const store: GraphStore = new PostgresGraphStore(process.env.DATABASE_URL!);
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
The interface boundary keeps the Postgres implementation isolated and gives future storage backends a clear contract to implement.
|
|
122
|
-
|
|
123
|
-
## Targeted Recall
|
|
124
|
-
|
|
125
|
-
Use `agent.recall()` when you want structured memory back without asking the LLM to answer yet. It searches atomic memory nodes by meaning, filters stale memories, groups them with their parent topic summaries, and returns a prompt block you can inspect or pass to your own model call.
|
|
126
|
-
|
|
127
|
-
```ts
|
|
128
|
-
const result = await agent.recall("deployment config", {
|
|
129
|
-
limit: 8,
|
|
130
|
-
minSimilarity: 0.55,
|
|
131
|
-
tokenBudget: 1000,
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
console.log(result.facts);
|
|
135
|
-
console.log(result.nodes);
|
|
136
|
-
console.log(result.systemPrompt);
|
|
137
|
-
console.log(result.tokenCount);
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
`recall()` is side-effect free. It does not call `invoke()`, does not mutate chat history, and does not inject anything automatically.
|
|
141
|
-
|
|
142
|
-
## Memory Grafting
|
|
143
|
-
|
|
144
|
-
Memory grafting is the core idea behind the name: one chatbot can build memory, and another chatbot can absorb only the useful parts.
|
|
145
|
-
|
|
146
|
-
```ts
|
|
147
|
-
await writingBot.absorbFromAgent(travelBot, {
|
|
148
|
-
prompt: "Japan travel preferences",
|
|
149
|
-
limit: 3,
|
|
150
|
-
});
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## Drift And Reentry
|
|
154
|
-
|
|
155
|
-
Use `driftSensitivity` for developer-friendly topic segmentation:
|
|
156
|
-
|
|
157
|
-
```ts
|
|
158
|
-
const agent = new MemoGrafterAgent({
|
|
159
|
-
db: { connectionString: process.env.DATABASE_URL! },
|
|
160
|
-
llm,
|
|
161
|
-
embedder,
|
|
162
|
-
drift: {
|
|
163
|
-
mode: "intent",
|
|
164
|
-
driftSensitivity: "medium",
|
|
165
|
-
minSegmentMessages: 3,
|
|
166
|
-
reentryDetection: true,
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
Sensitivity presets are `"low"`, `"medium"`, and `"high"`. The older numeric `threshold` option is still accepted for compatibility, but `driftSensitivity` is preferred.
|
|
172
|
-
|
|
173
|
-
When a conversation returns to an earlier topic, MemoGrafter can create a `reentry` edge between the new topic node and the earlier related topic node. For example, a chat can move from database decisions to authentication, then back to database pooling; the later database segment is linked back to the original database topic instead of becoming an isolated duplicate.
|
|
174
|
-
|
|
175
|
-
## Learn More
|
|
176
|
-
|
|
177
|
-
Read [USER_GUIDE.md](https://github.com/mayhemking007/memo-grafter/blob/main/USER_GUIDE.md) for setup, configuration, queue mode, custom adapters, fleet APIs, examples, and troubleshooting.
|
|
178
|
-
|
|
179
|
-
This repository also includes a runnable demo:
|
|
180
|
-
|
|
181
|
-
```text
|
|
182
|
-
examples/chatbot-memory-demo
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
## License
|
|
186
|
-
|
|
187
|
-
MIT
|
|
1
|
+
# MemoGrafter
|
|
2
|
+
[](https://www.npmjs.com/package/memo-grafter)
|
|
3
|
+
|
|
4
|
+
Structured memory for TypeScript chatbots.
|
|
5
|
+
|
|
6
|
+
MemoGrafter helps chatbot applications remember conversations without stuffing every old message back into the prompt. It turns conversation history into topic-based memory, recalls relevant details later, and can copy useful memory from one chatbot or session into another.
|
|
7
|
+
|
|
8
|
+
It is a memory framework, not an autonomous agent runtime. It does not run tools, schedule work, or decide goals for an agent.
|
|
9
|
+
|
|
10
|
+
## What It Is For
|
|
11
|
+
|
|
12
|
+
- Chatbots that need long-running memory.
|
|
13
|
+
- Assistants that should recall user preferences, prior context, and open questions.
|
|
14
|
+
- Multi-chatbot or multi-session flows where selected memory can be grafted into another conversation.
|
|
15
|
+
- TypeScript apps that need reusable memory, retrieval, and graph-backed conversation primitives.
|
|
16
|
+
|
|
17
|
+
## How It Works
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
chat messages
|
|
21
|
+
-> topic-based memory
|
|
22
|
+
-> graph links
|
|
23
|
+
-> relevant recall
|
|
24
|
+
-> optional memory grafting
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
MemoGrafter stores conversation turns, detects topic changes, summarizes useful context, links related memories, and retrieves or grafts memory when needed.
|
|
28
|
+
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install memo-grafter
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
MemoGrafter runs server-side on Node.js. The built-in storage backend uses PostgreSQL with `pgvector`.
|
|
36
|
+
|
|
37
|
+
## Minimal Example
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import "dotenv/config";
|
|
41
|
+
|
|
42
|
+
import {
|
|
43
|
+
MemoGrafterAgent,
|
|
44
|
+
OpenAIEmbedAdapter,
|
|
45
|
+
OpenAILLMAdapter,
|
|
46
|
+
} from "memo-grafter";
|
|
47
|
+
|
|
48
|
+
const agent = new MemoGrafterAgent({
|
|
49
|
+
db: { connectionString: process.env.DATABASE_URL! },
|
|
50
|
+
llm: new OpenAILLMAdapter("gpt-4o"),
|
|
51
|
+
embedder: new OpenAIEmbedAdapter("text-embedding-3-small"),
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
await agent.initialize();
|
|
55
|
+
|
|
56
|
+
await agent.invoke("I am planning a Japan trip.");
|
|
57
|
+
await agent.invoke("I like quiet towns, bookstores, and local cafes.");
|
|
58
|
+
|
|
59
|
+
const recall = await agent.recall("travel preferences");
|
|
60
|
+
console.log(recall.facts);
|
|
61
|
+
|
|
62
|
+
await agent.close();
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Learn More
|
|
66
|
+
|
|
67
|
+
- [USER_GUIDE.md](https://github.com/mayhemking007/memo-grafter/blob/main/USER_GUIDE.md) covers setup, configuration, adapters, queue mode, fleet APIs, examples, and troubleshooting.
|
|
68
|
+
- [ARCHITECTURE.md](https://github.com/mayhemking007/memo-grafter/blob/main/ARCHITECTURE.md) explains the current high-level implementation.
|
|
69
|
+
- `examples` contains runnable demo.
|
|
70
|
+
|
|
71
|
+
## License
|
|
72
|
+
|
|
73
|
+
MIT
|
package/USER_GUIDE.md
CHANGED
|
@@ -18,7 +18,7 @@ The most important idea is memory grafting. A chatbot can build useful memory du
|
|
|
18
18
|
- An OpenAI API key only if using the included OpenAI adapters.
|
|
19
19
|
- An Anthropic API key only if using the included Anthropic LLM adapter.
|
|
20
20
|
- A Gemini API key only if using the included Gemini adapters.
|
|
21
|
-
- Redis only if enabling queue mode.
|
|
21
|
+
- Redis only if enabling queue mode or the optional recall cache.
|
|
22
22
|
|
|
23
23
|
MemoGrafter is server-side only. Do not run it in browser code.
|
|
24
24
|
|
|
@@ -65,7 +65,7 @@ REDIS_URL=redis://localhost:6379
|
|
|
65
65
|
|
|
66
66
|
`GEMINI_API_KEY` is required only when using `GeminiLLMAdapter` or `GeminiEmbedAdapter`.
|
|
67
67
|
|
|
68
|
-
`REDIS_URL` is optional and only needed when you pass `queue` config.
|
|
68
|
+
`REDIS_URL` is optional and only needed when you pass `queue` or `cache` config.
|
|
69
69
|
|
|
70
70
|
Enable `pgvector` in PostgreSQL:
|
|
71
71
|
|
|
@@ -135,12 +135,12 @@ A message is one user or assistant turn:
|
|
|
135
135
|
|
|
136
136
|
```ts
|
|
137
137
|
export interface Message {
|
|
138
|
-
role: "user" | "assistant";
|
|
138
|
+
role: "system" | "user" | "assistant";
|
|
139
139
|
content: string;
|
|
140
140
|
}
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
`MemoGrafterAgent` keeps an in-memory history for the current session and stores messages in PostgreSQL during ingestion.
|
|
143
|
+
`MemoGrafterAgent` keeps an in-memory user/assistant history for the current session and stores messages in PostgreSQL during ingestion. System messages can be added to LLM calls internally when memory recall is pinned into an overflowing context window.
|
|
144
144
|
|
|
145
145
|
### Segments
|
|
146
146
|
|
|
@@ -252,13 +252,15 @@ await agent.close();
|
|
|
252
252
|
On every call, `invoke()`:
|
|
253
253
|
|
|
254
254
|
1. Adds the user message to local history.
|
|
255
|
-
2.
|
|
256
|
-
3.
|
|
257
|
-
4.
|
|
255
|
+
2. Builds the message list for the LLM.
|
|
256
|
+
3. If history is under the configured budget, sends the raw local history.
|
|
257
|
+
4. If history crosses the overflow threshold, calls targeted recall using recent conversation context, prepends the recall result as one pinned system message, and keeps only the recent raw message window.
|
|
258
258
|
5. Adds the assistant response to history.
|
|
259
|
-
6.
|
|
259
|
+
6. Queues ingestion of the updated conversation into the memory graph.
|
|
260
260
|
|
|
261
|
-
|
|
261
|
+
The overflow threshold is 80% of `inject.tokenBudget`. Recall failures are logged as warnings and fall back to the recent raw message window, so a retrieval or embedder problem should not crash the foreground chatbot turn.
|
|
262
|
+
|
|
263
|
+
On the first turn there may be no memory to recall. Later turns can use memory created from earlier turns once ingestion has completed.
|
|
262
264
|
|
|
263
265
|
### Targeted Recall
|
|
264
266
|
|
|
@@ -269,6 +271,9 @@ const result = await agent.recall("deployment config", {
|
|
|
269
271
|
limit: 8,
|
|
270
272
|
minSimilarity: 0.55,
|
|
271
273
|
tokenBudget: 1000,
|
|
274
|
+
cache: {
|
|
275
|
+
ttlSeconds: 90,
|
|
276
|
+
},
|
|
272
277
|
});
|
|
273
278
|
|
|
274
279
|
console.log(result.facts);
|
|
@@ -289,8 +294,11 @@ Options:
|
|
|
289
294
|
- `limit`: max memory nodes to fetch before filtering. Defaults to `10`.
|
|
290
295
|
- `minSimilarity`: cosine similarity floor. Defaults to `0.6`.
|
|
291
296
|
- `tokenBudget`: max approximate tokens for included fact blocks. Defaults to `1200`.
|
|
297
|
+
- `cache.ttlSeconds`: per-call recall cache TTL override when `MemoGrafterConfig.cache` is enabled. Values are clamped to 60-120 seconds.
|
|
298
|
+
|
|
299
|
+
`recall()` is side-effect free. It does not call `invoke()`, does not trigger a new LLM completion, and does not mutate local history. Your application can call it directly to display memories, add `result.systemPrompt` to a model call, or ignore the result.
|
|
292
300
|
|
|
293
|
-
`
|
|
301
|
+
`MemoGrafterAgent.invoke()` also calls `recall()` internally when local history overflows the configured history budget. In that automatic path, the returned `systemPrompt` is pinned as a single system message before the recent raw chat window.
|
|
294
302
|
|
|
295
303
|
If you call `recall()` immediately after `invoke()`, it only sees memory that has already been ingested into storage. In queue mode, wait for your background worker to finish before expecting newly created memories to appear.
|
|
296
304
|
|
|
@@ -449,6 +457,11 @@ const agent = new MemoGrafterAgent({
|
|
|
449
457
|
inject: {
|
|
450
458
|
bufferSize: 4,
|
|
451
459
|
tokenBudget: 1500,
|
|
460
|
+
recentWindowSize: 20,
|
|
461
|
+
},
|
|
462
|
+
cache: {
|
|
463
|
+
connectionString: process.env.REDIS_URL!,
|
|
464
|
+
ttlSeconds: 90,
|
|
452
465
|
},
|
|
453
466
|
});
|
|
454
467
|
```
|
|
@@ -592,13 +605,33 @@ Controls graph retrieval and traversal.
|
|
|
592
605
|
inject: {
|
|
593
606
|
bufferSize: 4,
|
|
594
607
|
tokenBudget: 1500,
|
|
608
|
+
recentWindowSize: 20,
|
|
595
609
|
}
|
|
596
610
|
```
|
|
597
611
|
|
|
598
|
-
Controls
|
|
612
|
+
Controls memory prompt sizing and the raw history window kept when chat history overflows.
|
|
599
613
|
|
|
600
614
|
- `bufferSize`: nearby raw messages to include.
|
|
601
|
-
- `tokenBudget`: approximate memory
|
|
615
|
+
- `tokenBudget`: approximate token budget used for memory prompts and agent history overflow checks. `MemoGrafterAgent` starts overflow handling at 80% of this value.
|
|
616
|
+
- `recentWindowSize`: number of newest raw chat messages to keep after the pinned recall block during overflow. Defaults to `20`.
|
|
617
|
+
|
|
618
|
+
When `MemoGrafterAgent` detects overflow, it builds a recall query from the last six message contents, calls recall with `{ limit: 5, minSimilarity: 0.65 }`, prepends the returned memory prompt as a system message, and keeps the last `recentWindowSize` raw messages. If recall fails, it uses only that recent raw window.
|
|
619
|
+
|
|
620
|
+
### `cache`
|
|
621
|
+
|
|
622
|
+
```ts
|
|
623
|
+
cache: {
|
|
624
|
+
connectionString: process.env.REDIS_URL!,
|
|
625
|
+
ttlSeconds: 90,
|
|
626
|
+
}
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
Enables an opt-in Redis cache for targeted recall. MemoGrafter creates one shared Redis client and uses it to cache only the raw `searchMemories()` result. It does not cache final prompts, filtered blocks, or `RetrievalResult`, so different `tokenBudget` values still assemble fresh output.
|
|
630
|
+
|
|
631
|
+
- `connectionString`: Redis URL.
|
|
632
|
+
- `ttlSeconds`: cache TTL in seconds. Defaults to `90` and is clamped between `60` and `120`.
|
|
633
|
+
|
|
634
|
+
Recall cache keys include the session ID, `limit`, `minSimilarity`, and a deterministic hash of the query embedding. Redis failures are logged as warnings and recall falls back to PostgreSQL search. The cache is disabled unless this section is present.
|
|
602
635
|
|
|
603
636
|
## Queue Mode
|
|
604
637
|
|
|
@@ -695,6 +728,60 @@ class MyGraphStore implements GraphStore {
|
|
|
695
728
|
|
|
696
729
|
Future storage implementations can use the same interface without changing pipeline or fleet code. For example, a SQLite plus vector-database implementation would implement `GraphStore` while preserving the same behavior expected by ingestion, grafting, and fleet APIs.
|
|
697
730
|
|
|
731
|
+
## Using Pipelines Directly
|
|
732
|
+
|
|
733
|
+
`MemoGrafterAgent` is the recommended starting point, but the underlying
|
|
734
|
+
pipeline classes are also exported for developers who want to build custom
|
|
735
|
+
agent loops or integrate MemoGrafter memory primitives into an existing
|
|
736
|
+
orchestration framework.
|
|
737
|
+
|
|
738
|
+
Pipeline classes are exported for composability. Their constructors and
|
|
739
|
+
internal behavior are not covered by semver stability guarantees until v1.0.
|
|
740
|
+
Breaking changes to pipeline internals may occur in minor versions.
|
|
741
|
+
|
|
742
|
+
Available pipeline exports:
|
|
743
|
+
|
|
744
|
+
- `IngestPipeline`: segments messages, builds topic nodes, extracts memory nodes, and writes graph edges.
|
|
745
|
+
- `RetrieverPipeline`: embeds a query, searches memory nodes, and returns a structured `RetrievalResult`.
|
|
746
|
+
- `GrafterPipeline`: traverses the topic graph and assembles a token-budget-fitted system prompt.
|
|
747
|
+
|
|
748
|
+
Example using `RetrieverPipeline` directly:
|
|
749
|
+
|
|
750
|
+
```ts
|
|
751
|
+
import {
|
|
752
|
+
PostgresGraphStore,
|
|
753
|
+
RetrieverPipeline,
|
|
754
|
+
OpenAIEmbedAdapter,
|
|
755
|
+
} from "memo-grafter";
|
|
756
|
+
|
|
757
|
+
const store = new PostgresGraphStore(process.env.DATABASE_URL!);
|
|
758
|
+
await store.initialize();
|
|
759
|
+
|
|
760
|
+
const embedder = new OpenAIEmbedAdapter("text-embedding-3-small");
|
|
761
|
+
|
|
762
|
+
const retriever = new RetrieverPipeline(store, embedder, {
|
|
763
|
+
limit: 8,
|
|
764
|
+
minSimilarity: 0.55,
|
|
765
|
+
tokenBudget: 1000,
|
|
766
|
+
});
|
|
767
|
+
|
|
768
|
+
const result = await retriever.run(
|
|
769
|
+
"deployment config and Kubernetes namespace",
|
|
770
|
+
sessionId,
|
|
771
|
+
);
|
|
772
|
+
|
|
773
|
+
console.log(result.facts);
|
|
774
|
+
console.log(result.systemPrompt);
|
|
775
|
+
|
|
776
|
+
await store.close();
|
|
777
|
+
```
|
|
778
|
+
|
|
779
|
+
When using pipelines directly you are responsible for managing the store
|
|
780
|
+
connection lifecycle. Call `store.close()` during graceful shutdown.
|
|
781
|
+
|
|
782
|
+
`MemoGrafterAgent` remains the batteries-included default. Existing code
|
|
783
|
+
that uses `MemoGrafterAgent` does not need to change.
|
|
784
|
+
|
|
698
785
|
## Fleet API
|
|
699
786
|
|
|
700
787
|
Fleets let you group color-scoped worker chatbots and use a conductor to graft memory across workers.
|
|
@@ -868,7 +955,7 @@ const result = await agent.recall("Japan travel preferences", {
|
|
|
868
955
|
|
|
869
956
|
### Redis Warnings
|
|
870
957
|
|
|
871
|
-
Redis is only required when you pass `queue` config. If you do not need background ingestion, remove
|
|
958
|
+
Redis is only required when you pass `queue` or `cache` config. If you do not need background ingestion or recall caching, remove those sections.
|
|
872
959
|
|
|
873
960
|
### Browser Runtime Error
|
|
874
961
|
|
|
@@ -884,6 +971,7 @@ Practical notes:
|
|
|
884
971
|
- Use PostgreSQL with `pgvector` enabled.
|
|
885
972
|
- Tune `tokenBudget` to control prompt size and cost.
|
|
886
973
|
- Use queue mode if ingestion becomes slow.
|
|
974
|
+
- Use the optional recall cache for long sessions with repeated or automatic overflow recall.
|
|
887
975
|
- Store your own user/session mapping outside MemoGrafter.
|
|
888
976
|
- Call `close()` during graceful shutdown.
|
|
889
977
|
- Do not expose database credentials or OpenAI keys to browser code.
|
|
@@ -904,6 +992,9 @@ Main exports:
|
|
|
904
992
|
- `OpenAILLMAdapter`
|
|
905
993
|
- `OpenAIEmbedAdapter`
|
|
906
994
|
- `PostgresGraphStore`
|
|
995
|
+
- `GrafterPipeline`
|
|
996
|
+
- `IngestPipeline`
|
|
997
|
+
- `RetrieverPipeline`
|
|
907
998
|
- `GraphStore`
|
|
908
999
|
- `FleetAgentRecord`
|
|
909
1000
|
- `RetrievalResult`
|
package/dist/MemoGrafter.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Redis } from "ioredis";
|
|
1
2
|
import { MemoGrafterFleet } from "./fleet/MemoGrafterFleet.js";
|
|
2
3
|
import type { MemoGrafterFleetOptions } from "./fleet/types.js";
|
|
3
4
|
import type { GraphStore } from "./store/index.js";
|
|
@@ -6,6 +7,7 @@ export declare class MemoGrafter {
|
|
|
6
7
|
readonly llm: LLMAdapter;
|
|
7
8
|
readonly embedder: EmbedAdapter;
|
|
8
9
|
readonly store: GraphStore;
|
|
10
|
+
readonly recallCache: Redis | null;
|
|
9
11
|
private readonly ingestPipeline;
|
|
10
12
|
private readonly grafterPipeline;
|
|
11
13
|
private readonly ingestQueue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoGrafter.d.ts","sourceRoot":"","sources":["../src/MemoGrafter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoGrafter.d.ts","sourceRoot":"","sources":["../src/MemoGrafter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,qBAAa,WAAW;IACtB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAErC,MAAM,EAAE,iBAAiB;IAmDrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAQpE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAIjE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASpE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IAM7F,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAIjE,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMrF,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAmBpG,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMpF,WAAW,CAAC,OAAO,GAAE,uBAA4B,GAAG,gBAAgB;IAI9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,OAAO,CAAC,uBAAuB;CAUhC"}
|
package/dist/MemoGrafter.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Redis } from "ioredis";
|
|
1
2
|
import { GrafterPipeline } from "./pipeline/GrafterPipeline.js";
|
|
2
3
|
import { IngestPipeline } from "./pipeline/IngestPipeline.js";
|
|
3
4
|
import { IngestQueue } from "./queue/IngestQueue.js";
|
|
@@ -7,6 +8,7 @@ export class MemoGrafter {
|
|
|
7
8
|
llm;
|
|
8
9
|
embedder;
|
|
9
10
|
store;
|
|
11
|
+
recallCache;
|
|
10
12
|
ingestPipeline;
|
|
11
13
|
grafterPipeline;
|
|
12
14
|
ingestQueue;
|
|
@@ -27,6 +29,15 @@ export class MemoGrafter {
|
|
|
27
29
|
this.llm = config.llm;
|
|
28
30
|
this.embedder = config.embedder;
|
|
29
31
|
this.store = new PostgresGraphStore(config.db.connectionString);
|
|
32
|
+
this.recallCache = config.cache
|
|
33
|
+
? new Redis(config.cache.connectionString, {
|
|
34
|
+
enableOfflineQueue: false,
|
|
35
|
+
maxRetriesPerRequest: 1,
|
|
36
|
+
})
|
|
37
|
+
: null;
|
|
38
|
+
this.recallCache?.on("error", (error) => {
|
|
39
|
+
console.warn("MemoGrafter recall cache Redis warning:", error.message);
|
|
40
|
+
});
|
|
30
41
|
const ingestConfig = {
|
|
31
42
|
windowSize,
|
|
32
43
|
topK,
|
|
@@ -105,6 +116,10 @@ export class MemoGrafter {
|
|
|
105
116
|
}
|
|
106
117
|
async close() {
|
|
107
118
|
await this.ingestQueue?.close();
|
|
119
|
+
await this.recallCache?.quit().catch((error) => {
|
|
120
|
+
console.warn("MemoGrafter recall cache close warning:", error);
|
|
121
|
+
this.recallCache?.disconnect();
|
|
122
|
+
});
|
|
108
123
|
await this.store.close();
|
|
109
124
|
}
|
|
110
125
|
assertServerEnvironment() {
|
package/dist/MemoGrafter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoGrafter.js","sourceRoot":"","sources":["../src/MemoGrafter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAc/D,MAAM,OAAO,WAAW;IACb,GAAG,CAAa;IAChB,QAAQ,CAAe;IACvB,KAAK,CAAa;
|
|
1
|
+
{"version":3,"file":"MemoGrafter.js","sourceRoot":"","sources":["../src/MemoGrafter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAc/D,MAAM,OAAO,WAAW;IACb,GAAG,CAAa;IAChB,QAAQ,CAAe;IACvB,KAAK,CAAa;IAClB,WAAW,CAAe;IAClB,cAAc,CAAiB;IAC/B,eAAe,CAAkB;IACjC,WAAW,CAAqB;IAEjD,YAAY,MAAyB;QACnC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;QAC1C,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACxD,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,EAAE,kBAAkB,IAAI,CAAC,CAAC;QACjE,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC;QAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACxD,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;QAEvD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK;YAC7B,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBACzC,kBAAkB,EAAE,KAAK;gBACzB,oBAAoB,EAAE,CAAC;aACxB,CAAC;YACF,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YAC7C,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG;YACnB,UAAU;YACV,IAAI;YACJ,IAAI;YACJ,kBAAkB;SACnB,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE;YAChF,GAAG,YAAY;YACf,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE;YACrD,QAAQ;YACR,UAAU;YACV,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9F,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,QAAmB,EAAE,SAAiB;QAC3C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,SAAS,CAAC,QAAmB,EAAE,SAAiB;QAC9C,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAmB,EAAE,SAAiB;QACxD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAClE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,QAAkB;QAC1C,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAkB,EAAE,eAAuB;QAClE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACzE,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;QACzD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,eAAuB,EAAE,OAA+B;QACjF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAExE,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,EAAE;gBAC5D,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;gBACrB,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,GAAG;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAkB,EAAE,eAAuB;QAC3D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACzE,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;QACzD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,WAAW,CAAC,UAAmC,EAAE;QAC/C,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACtD,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAC/D,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEO,uBAAuB;QAC7B,MAAM,WAAW,GAAG,UAGnB,CAAC;QAEF,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,WAAW,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7F,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;CACF"}
|
|
@@ -5,6 +5,8 @@ export declare class MemoGrafterAgent {
|
|
|
5
5
|
private readonly history;
|
|
6
6
|
private readonly baseSystemPrompt;
|
|
7
7
|
private readonly historyTokenBudget;
|
|
8
|
+
private readonly recentWindowSize;
|
|
9
|
+
private readonly cacheConfig;
|
|
8
10
|
private pendingIngest;
|
|
9
11
|
constructor(config: MemoGrafterConfig);
|
|
10
12
|
initialize(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoGrafterAgent.d.ts","sourceRoot":"","sources":["../src/MemoGrafterAgent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoGrafterAgent.d.ts","sourceRoot":"","sources":["../src/MemoGrafterAgent.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,eAAe,EACf,SAAS,EACT,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,aAAa,CAAoC;gBAE7C,MAAM,EAAE,iBAAiB;IAQrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYlD,UAAU,IAAI,OAAO,EAAE;IAIvB,YAAY,IAAI,MAAM;IAIhB,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAMtC,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAM5C,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAO1D,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAItD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkB9E,eAAe,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKhH,OAAO,CAAC,uBAAuB;YAUjB,YAAY;IA4B1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
|
package/dist/MemoGrafterAgent.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { MemoGrafter } from "./MemoGrafter.js";
|
|
3
3
|
import { RetrieverPipeline } from "./pipeline/RetrieverPipeline.js";
|
|
4
|
-
import { formatCompressedTopic } from "./prompts/historyCompressionPrompt.js";
|
|
5
4
|
import { countApproxTokens } from "./utils/text/tokenCount.js";
|
|
6
5
|
export class MemoGrafterAgent {
|
|
7
6
|
core;
|
|
@@ -9,11 +8,15 @@ export class MemoGrafterAgent {
|
|
|
9
8
|
history = [];
|
|
10
9
|
baseSystemPrompt;
|
|
11
10
|
historyTokenBudget;
|
|
11
|
+
recentWindowSize;
|
|
12
|
+
cacheConfig;
|
|
12
13
|
pendingIngest = Promise.resolve();
|
|
13
14
|
constructor(config) {
|
|
14
15
|
this.core = new MemoGrafter(config);
|
|
15
16
|
this.baseSystemPrompt = config.systemPrompt ?? "";
|
|
16
17
|
this.historyTokenBudget = config.inject?.tokenBudget ?? 4000;
|
|
18
|
+
this.recentWindowSize = config.inject?.recentWindowSize ?? 20;
|
|
19
|
+
this.cacheConfig = config.cache;
|
|
17
20
|
}
|
|
18
21
|
initialize() {
|
|
19
22
|
return this.core.initialize();
|
|
@@ -52,7 +55,15 @@ export class MemoGrafterAgent {
|
|
|
52
55
|
return this.core.ingestGraftedNodes(nodes, this.sessionId);
|
|
53
56
|
}
|
|
54
57
|
async recall(query, options = {}) {
|
|
55
|
-
const
|
|
58
|
+
const cacheConfig = options.cache ?? (this.cacheConfig
|
|
59
|
+
? {
|
|
60
|
+
...(this.cacheConfig.ttlSeconds !== undefined ? { ttlSeconds: this.cacheConfig.ttlSeconds } : {}),
|
|
61
|
+
}
|
|
62
|
+
: undefined);
|
|
63
|
+
const pipeline = new RetrieverPipeline(this.core.store, this.core.embedder, {
|
|
64
|
+
...options,
|
|
65
|
+
...(cacheConfig !== undefined ? { cache: cacheConfig } : {}),
|
|
66
|
+
}, this.core.recallCache);
|
|
56
67
|
return pipeline.run(query, this.getSessionId());
|
|
57
68
|
}
|
|
58
69
|
async absorbFromAgent(sourceAgent, options = {}) {
|
|
@@ -73,17 +84,23 @@ export class MemoGrafterAgent {
|
|
|
73
84
|
if (tokenCount < overflowThreshold) {
|
|
74
85
|
return this.history;
|
|
75
86
|
}
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
87
|
+
const recentMessages = this.history.slice(-this.recentWindowSize);
|
|
88
|
+
const recentContext = this.history
|
|
89
|
+
.slice(-6)
|
|
90
|
+
.map((message) => message.content)
|
|
91
|
+
.join("\n");
|
|
92
|
+
try {
|
|
93
|
+
const result = await this.recall(recentContext, { limit: 5, minSimilarity: 0.65 });
|
|
94
|
+
const pinnedMessage = {
|
|
95
|
+
role: "system",
|
|
96
|
+
content: result.systemPrompt,
|
|
97
|
+
};
|
|
98
|
+
return [pinnedMessage, ...recentMessages];
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.warn("MemoGrafter recall warning:", error);
|
|
102
|
+
return recentMessages;
|
|
79
103
|
}
|
|
80
|
-
const lastCoveredIndex = Math.max(...segments.map((segment) => segment.endIndex));
|
|
81
|
-
const summaryBlocks = nodes.map((node) => ({
|
|
82
|
-
role: "system",
|
|
83
|
-
content: formatCompressedTopic(node),
|
|
84
|
-
}));
|
|
85
|
-
const recentMessages = this.history.slice(lastCoveredIndex + 1);
|
|
86
|
-
return [...summaryBlocks, ...recentMessages];
|
|
87
104
|
}
|
|
88
105
|
close() {
|
|
89
106
|
return this.pendingIngest.then(() => this.core.close());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoGrafterAgent.js","sourceRoot":"","sources":["../src/MemoGrafterAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MemoGrafterAgent.js","sourceRoot":"","sources":["../src/MemoGrafterAgent.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,9 @@ export { WorkerAgent } from "./fleet/WorkerAgent.js";
|
|
|
6
6
|
export { AnthropicLLMAdapter } from "./adapters/AnthropicAdapter.js";
|
|
7
7
|
export { GeminiEmbedAdapter, GeminiLLMAdapter } from "./adapters/GeminiAdapter.js";
|
|
8
8
|
export { OpenAIEmbedAdapter, OpenAILLMAdapter } from "./adapters/OpenAIAdapter.js";
|
|
9
|
+
export { GrafterPipeline } from "./pipeline/GrafterPipeline.js";
|
|
10
|
+
export { IngestPipeline } from "./pipeline/IngestPipeline.js";
|
|
11
|
+
export { RetrieverPipeline } from "./pipeline/RetrieverPipeline.js";
|
|
9
12
|
export { PostgresGraphStore } from "./store/index.js";
|
|
10
13
|
export type { AbsorbFromAgentOptions, DriftMode, DriftSensitivity, EmbedAdapter, ExtractedMemory, InjectionResult, LLMAdapter, MemoryEdge, MemoryNode, MemoryNodeInsert, MemorySourceType, MemoryType, MemoGrafterConfig, MemoGrafterDriftConfig, MemoGrafterGraphConfig, MemoGrafterInjectConfig, MemoGrafterQueueConfig, Message, RetrievalResult, RetrieverConfig, SegmentExtractionResult, TopicEdge, TopicNode, TopicSegment, } from "./types.js";
|
|
11
14
|
export type { ConductorGraftOptions, FleetAbsorbOptions, FleetAgentInfo, FleetGraph, FleetWorker, MemoGrafterFleetOptions, WorkerAgentConfig, } from "./fleet/types.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,sBAAsB,EACtB,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,OAAO,EACP,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,WAAW,EACX,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,sBAAsB,EACtB,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,OAAO,EACP,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,WAAW,EACX,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,5 +6,8 @@ export { WorkerAgent } from "./fleet/WorkerAgent.js";
|
|
|
6
6
|
export { AnthropicLLMAdapter } from "./adapters/AnthropicAdapter.js";
|
|
7
7
|
export { GeminiEmbedAdapter, GeminiLLMAdapter } from "./adapters/GeminiAdapter.js";
|
|
8
8
|
export { OpenAIEmbedAdapter, OpenAILLMAdapter } from "./adapters/OpenAIAdapter.js";
|
|
9
|
+
export { GrafterPipeline } from "./pipeline/GrafterPipeline.js";
|
|
10
|
+
export { IngestPipeline } from "./pipeline/IngestPipeline.js";
|
|
11
|
+
export { RetrieverPipeline } from "./pipeline/RetrieverPipeline.js";
|
|
9
12
|
export { PostgresGraphStore } from "./store/index.js";
|
|
10
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import type { GraphStore } from "../store/index.js";
|
|
2
2
|
import type { InjectionResult } from "../types.js";
|
|
3
3
|
export declare class GrafterPipeline {
|
|
4
|
+
/** @internal */
|
|
4
5
|
private store;
|
|
6
|
+
/** @internal */
|
|
5
7
|
private config;
|
|
6
|
-
constructor(
|
|
8
|
+
constructor(
|
|
9
|
+
/** @internal */
|
|
10
|
+
store: GraphStore,
|
|
11
|
+
/** @internal */
|
|
12
|
+
config: {
|
|
7
13
|
hopDepth: number;
|
|
8
14
|
bufferSize: number;
|
|
9
15
|
tokenBudget: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrafterPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/GrafterPipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,aAAa,CAAC;AAG9D,qBAAa,eAAe;IAExB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"GrafterPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/GrafterPipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,aAAa,CAAC;AAG9D,qBAAa,eAAe;IAExB,gBAAgB;IAChB,OAAO,CAAC,KAAK;IACb,gBAAgB;IAChB,OAAO,CAAC,MAAM;;IAHd,gBAAgB;IACR,KAAK,EAAE,UAAU;IACzB,gBAAgB;IACR,MAAM,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB;IAGG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;YA4B5D,cAAc;CAe7B"}
|
|
@@ -3,7 +3,11 @@ import { countApproxTokens } from "../utils/text/tokenCount.js";
|
|
|
3
3
|
export class GrafterPipeline {
|
|
4
4
|
store;
|
|
5
5
|
config;
|
|
6
|
-
constructor(
|
|
6
|
+
constructor(
|
|
7
|
+
/** @internal */
|
|
8
|
+
store,
|
|
9
|
+
/** @internal */
|
|
10
|
+
config) {
|
|
7
11
|
this.store = store;
|
|
8
12
|
this.config = config;
|
|
9
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrafterPipeline.js","sourceRoot":"","sources":["../../src/pipeline/GrafterPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"GrafterPipeline.js","sourceRoot":"","sources":["../../src/pipeline/GrafterPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,OAAO,eAAe;IAGhB;IAEA;IAJV;IACE,gBAAgB;IACR,KAAiB;IACzB,gBAAgB;IACR,MAIP;QANO,UAAK,GAAL,KAAK,CAAY;QAEjB,WAAM,GAAN,MAAM,CAIb;IACA,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,QAAkB;QAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChG,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;eAClC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;eACrC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAC/B,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAC/B,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAEjD,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtE,WAAW,CAAC,GAAG,EAAE,CAAC;YAClB,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACjE,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO;YACL,YAAY;YACZ,KAAK,EAAE,WAAW;YAClB,UAAU;SACX,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,KAAkB;QAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzE,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;CAEF"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import type { GraphStore } from "../store/index.js";
|
|
2
2
|
import type { DriftSensitivity, EmbedAdapter, LLMAdapter, Message, TopicNode } from "../types.js";
|
|
3
3
|
export declare class IngestPipeline {
|
|
4
|
+
/** @internal */
|
|
4
5
|
private readonly store;
|
|
6
|
+
/** @internal */
|
|
5
7
|
private readonly embedder;
|
|
8
|
+
/** @internal */
|
|
6
9
|
private readonly config;
|
|
7
10
|
private readonly driftDetector;
|
|
8
11
|
private readonly segmentProcessor;
|
|
9
|
-
constructor(
|
|
12
|
+
constructor(
|
|
13
|
+
/** @internal */
|
|
14
|
+
store: GraphStore,
|
|
15
|
+
/** @internal */
|
|
16
|
+
llm: LLMAdapter,
|
|
17
|
+
/** @internal */
|
|
18
|
+
embedder: EmbedAdapter,
|
|
19
|
+
/** @internal */
|
|
20
|
+
config: {
|
|
10
21
|
windowSize: number;
|
|
11
22
|
threshold?: number;
|
|
12
23
|
driftSensitivity?: DriftSensitivity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IngestPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/IngestPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOlG,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"IngestPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/IngestPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOlG,qBAAa,cAAc;IAKvB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAGtB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;;IAGlD,gBAAgB;IACC,KAAK,EAAE,UAAU;IAClC,gBAAgB;IAChB,GAAG,EAAE,UAAU;IACf,gBAAgB;IACC,QAAQ,EAAE,YAAY;IACvC,gBAAgB;IACC,MAAM,EAAE;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;IAoBG,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YA8CzD,YAAY;CAI3B"}
|
|
@@ -9,7 +9,15 @@ export class IngestPipeline {
|
|
|
9
9
|
config;
|
|
10
10
|
driftDetector;
|
|
11
11
|
segmentProcessor;
|
|
12
|
-
constructor(
|
|
12
|
+
constructor(
|
|
13
|
+
/** @internal */
|
|
14
|
+
store,
|
|
15
|
+
/** @internal */
|
|
16
|
+
llm,
|
|
17
|
+
/** @internal */
|
|
18
|
+
embedder,
|
|
19
|
+
/** @internal */
|
|
20
|
+
config) {
|
|
13
21
|
this.store = store;
|
|
14
22
|
this.embedder = embedder;
|
|
15
23
|
this.config = config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IngestPipeline.js","sourceRoot":"","sources":["../../src/pipeline/IngestPipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"IngestPipeline.js","sourceRoot":"","sources":["../../src/pipeline/IngestPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,24 @@
|
|
|
1
|
+
import type { Redis } from "ioredis";
|
|
1
2
|
import type { GraphStore } from "../store/index.js";
|
|
2
3
|
import type { EmbedAdapter, RetrievalResult, RetrieverConfig } from "../types.js";
|
|
3
4
|
export declare class RetrieverPipeline {
|
|
5
|
+
/** @internal */
|
|
4
6
|
private store;
|
|
7
|
+
/** @internal */
|
|
5
8
|
private embedder;
|
|
6
9
|
private config;
|
|
7
|
-
|
|
10
|
+
/** @internal */
|
|
11
|
+
private cacheRedis;
|
|
12
|
+
constructor(
|
|
13
|
+
/** @internal */
|
|
14
|
+
store: GraphStore,
|
|
15
|
+
/** @internal */
|
|
16
|
+
embedder: EmbedAdapter, config: RetrieverConfig,
|
|
17
|
+
/** @internal */
|
|
18
|
+
cacheRedis?: Redis | null);
|
|
8
19
|
run(query: string, sessionId: string): Promise<RetrievalResult>;
|
|
20
|
+
private searchMemories;
|
|
21
|
+
private hashEmbedding;
|
|
9
22
|
private buildBlocks;
|
|
10
23
|
}
|
|
11
24
|
//# sourceMappingURL=RetrieverPipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RetrieverPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/RetrieverPipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RetrieverPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/RetrieverPipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EACf,eAAe,EAEhB,MAAM,aAAa,CAAC;AAWrB,qBAAa,iBAAiB;IAE1B,gBAAgB;IAChB,OAAO,CAAC,KAAK;IACb,gBAAgB;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,gBAAgB;IAChB,OAAO,CAAC,UAAU;;IANlB,gBAAgB;IACR,KAAK,EAAE,UAAU;IACzB,gBAAgB;IACR,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,eAAe;IAC/B,gBAAgB;IACR,UAAU,GAAE,KAAK,GAAG,IAAW;IAGnC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAiDvD,cAAc;IA6C5B,OAAO,CAAC,aAAa;YAKP,WAAW;CA8B1B"}
|
|
@@ -1,20 +1,29 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import { buildFactRetrievalPrompt, formatFactBlock, } from "../prompts/factRetrievalPrompt.js";
|
|
2
3
|
import { countApproxTokens } from "../utils/text/tokenCount.js";
|
|
3
4
|
export class RetrieverPipeline {
|
|
4
5
|
store;
|
|
5
6
|
embedder;
|
|
6
7
|
config;
|
|
7
|
-
|
|
8
|
+
cacheRedis;
|
|
9
|
+
constructor(
|
|
10
|
+
/** @internal */
|
|
11
|
+
store,
|
|
12
|
+
/** @internal */
|
|
13
|
+
embedder, config,
|
|
14
|
+
/** @internal */
|
|
15
|
+
cacheRedis = null) {
|
|
8
16
|
this.store = store;
|
|
9
17
|
this.embedder = embedder;
|
|
10
18
|
this.config = config;
|
|
19
|
+
this.cacheRedis = cacheRedis;
|
|
11
20
|
}
|
|
12
21
|
async run(query, sessionId) {
|
|
13
22
|
const limit = this.config.limit ?? 10;
|
|
14
23
|
const minSimilarity = this.config.minSimilarity ?? 0.6;
|
|
15
24
|
const tokenBudget = this.config.tokenBudget ?? 1200;
|
|
16
25
|
const embedding = await this.embedder.embed(query);
|
|
17
|
-
const searchedFacts = await this.
|
|
26
|
+
const searchedFacts = await this.searchMemories(embedding, sessionId, limit, minSimilarity);
|
|
18
27
|
const activeFacts = searchedFacts.filter((fact) => fact.decayed === false && fact.supersededBy == null);
|
|
19
28
|
if (activeFacts.length === 0) {
|
|
20
29
|
return {
|
|
@@ -48,6 +57,30 @@ export class RetrieverPipeline {
|
|
|
48
57
|
tokenCount,
|
|
49
58
|
};
|
|
50
59
|
}
|
|
60
|
+
async searchMemories(embedding, sessionId, limit, minSimilarity) {
|
|
61
|
+
if (!this.config.cache || !this.cacheRedis) {
|
|
62
|
+
return this.store.searchMemories(embedding, sessionId, limit, minSimilarity);
|
|
63
|
+
}
|
|
64
|
+
const ttl = Math.min(Math.max(this.config.cache.ttlSeconds ?? 90, 60), 120);
|
|
65
|
+
const cacheKey = `mg:recall:${sessionId}:${limit}:${minSimilarity}:${this.hashEmbedding(embedding)}`;
|
|
66
|
+
try {
|
|
67
|
+
const hit = await this.cacheRedis.get(cacheKey);
|
|
68
|
+
if (hit) {
|
|
69
|
+
return JSON.parse(hit);
|
|
70
|
+
}
|
|
71
|
+
const searchedFacts = await this.store.searchMemories(embedding, sessionId, limit, minSimilarity);
|
|
72
|
+
await this.cacheRedis.setex(cacheKey, ttl, JSON.stringify(searchedFacts));
|
|
73
|
+
return searchedFacts;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.warn("MemoGrafter recall cache warning:", error);
|
|
77
|
+
return this.store.searchMemories(embedding, sessionId, limit, minSimilarity);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
hashEmbedding(embedding) {
|
|
81
|
+
const str = embedding.map((value) => value.toFixed(6)).join(",");
|
|
82
|
+
return createHash("sha1").update(str).digest("hex").slice(0, 16);
|
|
83
|
+
}
|
|
51
84
|
async buildBlocks(facts, sessionId) {
|
|
52
85
|
const factsByTopic = new Map();
|
|
53
86
|
for (const fact of facts) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RetrieverPipeline.js","sourceRoot":"","sources":["../../src/pipeline/RetrieverPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,mCAAmC,CAAC;AAS3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAUhE,MAAM,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"RetrieverPipeline.js","sourceRoot":"","sources":["../../src/pipeline/RetrieverPipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -91,6 +91,9 @@ export interface RetrieverConfig {
|
|
|
91
91
|
limit?: number;
|
|
92
92
|
minSimilarity?: number;
|
|
93
93
|
tokenBudget?: number;
|
|
94
|
+
cache?: {
|
|
95
|
+
ttlSeconds?: number;
|
|
96
|
+
};
|
|
94
97
|
}
|
|
95
98
|
export interface RetrievalResult {
|
|
96
99
|
facts: (MemoryNode & {
|
|
@@ -130,6 +133,8 @@ export interface MemoGrafterGraphConfig {
|
|
|
130
133
|
export interface MemoGrafterInjectConfig {
|
|
131
134
|
bufferSize?: number;
|
|
132
135
|
tokenBudget?: number;
|
|
136
|
+
/** Default 20. How many raw messages to keep after the pinned recall block. */
|
|
137
|
+
recentWindowSize?: number;
|
|
133
138
|
}
|
|
134
139
|
export interface MemoGrafterQueueConfig {
|
|
135
140
|
redisUrl: string;
|
|
@@ -137,6 +142,10 @@ export interface MemoGrafterQueueConfig {
|
|
|
137
142
|
removeOnComplete?: boolean | number;
|
|
138
143
|
removeOnFail?: boolean | number;
|
|
139
144
|
}
|
|
145
|
+
export interface MemoGrafterCacheConfig {
|
|
146
|
+
connectionString: string;
|
|
147
|
+
ttlSeconds?: number;
|
|
148
|
+
}
|
|
140
149
|
export interface MemoGrafterConfig {
|
|
141
150
|
db: {
|
|
142
151
|
connectionString: string;
|
|
@@ -148,5 +157,6 @@ export interface MemoGrafterConfig {
|
|
|
148
157
|
graph?: MemoGrafterGraphConfig;
|
|
149
158
|
inject?: MemoGrafterInjectConfig;
|
|
150
159
|
queue?: MemoGrafterQueueConfig;
|
|
160
|
+
cache?: MemoGrafterCacheConfig;
|
|
151
161
|
}
|
|
152
162
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driftScore.d.ts","sourceRoot":"","sources":["../../../src/utils/drift/driftScore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"driftScore.d.ts","sourceRoot":"","sources":["../../../src/utils/drift/driftScore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,wBAAgB,iBAAiB,CAC/B,gBAAgB,EAAE,MAAM,EAAE,EAC1B,cAAc,EAAE,OAAO,EACvB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,iBAAiB,EAAE,MAAM,EAAE,GAAG,IAAI,EAClC,SAAS,EAAE,MAAM,GAChB,MAAM,CAQR"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { countApproxTokens } from "../text/tokenCount.js";
|
|
1
2
|
import { cosineSimilarity } from "./cosineSimilarity.js";
|
|
2
3
|
import { structuralMultiplier } from "./driftMarkers.js";
|
|
3
4
|
export function computeDriftScore(currentEmbedding, currentMessage, centroidEmbedding, previousEmbedding, threshold) {
|
|
4
|
-
const tokenEstimate = currentMessage.content
|
|
5
|
+
const tokenEstimate = countApproxTokens(currentMessage.content);
|
|
5
6
|
const lengthWeight = Math.min(1, tokenEstimate / 20);
|
|
6
7
|
const centroidDrift = (1 - cosineSimilarity(centroidEmbedding, currentEmbedding)) * lengthWeight;
|
|
7
8
|
const pointDrift = previousEmbedding ? 1 - cosineSimilarity(previousEmbedding, currentEmbedding) : 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driftScore.js","sourceRoot":"","sources":["../../../src/utils/drift/driftScore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,UAAU,iBAAiB,CAC/B,gBAA0B,EAC1B,cAAuB,EACvB,iBAA2B,EAC3B,iBAAkC,EAClC,SAAiB;IAEjB,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"driftScore.js","sourceRoot":"","sources":["../../../src/utils/drift/driftScore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,UAAU,iBAAiB,CAC/B,gBAA0B,EAC1B,cAAuB,EACvB,iBAA2B,EAC3B,iBAAkC,EAClC,SAAiB;IAEjB,MAAM,aAAa,GAAG,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,GAAG,YAAY,CAAC;IACjG,MAAM,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E,OAAO,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reentryText.d.ts","sourceRoot":"","sources":["../../../src/utils/reentry/reentryText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"reentryText.d.ts","sourceRoot":"","sources":["../../../src/utils/reentry/reentryText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEpE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAO/F;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAcrG"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { isShortMessage } from "../text/tokenCount.js";
|
|
1
2
|
import { contentTerms } from "../text/terms.js";
|
|
2
3
|
import { hasReentryCue } from "./reentryCues.js";
|
|
3
4
|
export function isMeaningfulReentryMessage(message) {
|
|
4
|
-
|
|
5
|
-
return tokenEstimate >= 5 || hasReentryCue(message.content);
|
|
5
|
+
return !isShortMessage(message.content, 5) || hasReentryCue(message.content);
|
|
6
6
|
}
|
|
7
7
|
export function segmentHasReentryCue(segment, messages) {
|
|
8
8
|
for (let index = segment.start; index <= segment.end; index += 1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reentryText.js","sourceRoot":"","sources":["../../../src/utils/reentry/reentryText.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,
|
|
1
|
+
{"version":3,"file":"reentryText.js","sourceRoot":"","sources":["../../../src/utils/reentry/reentryText.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA4B,EAAE,QAAmB;IACpF,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC9E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAA4B,EAAE,QAAmB;IACtF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM;YAAE,SAAS;QACvC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YAAE,SAAS;QAEnD,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenCount.d.ts","sourceRoot":"","sources":["../../../src/utils/text/tokenCount.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
1
|
+
{"version":3,"file":"tokenCount.d.ts","sourceRoot":"","sources":["../../../src/utils/text/tokenCount.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,OAAO,CAEpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenCount.js","sourceRoot":"","sources":["../../../src/utils/text/tokenCount.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"tokenCount.js","sourceRoot":"","sources":["../../../src/utils/text/tokenCount.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,SAAS,GAAG,EAAE;IACzD,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC7C,CAAC"}
|