topic-memory 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +326 -0
- package/README.zh-CN.md +387 -0
- package/dist/engine.d.ts +43 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +375 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/llm.d.ts +10 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +43 -0
- package/dist/llm.js.map +1 -0
- package/dist/prompts.d.ts +3 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +34 -0
- package/dist/prompts.js.map +1 -0
- package/dist/storage/in-memory.d.ts +16 -0
- package/dist/storage/in-memory.d.ts.map +1 -0
- package/dist/storage/in-memory.js +24 -0
- package/dist/storage/in-memory.js.map +1 -0
- package/dist/storage/indexeddb.d.ts +23 -0
- package/dist/storage/indexeddb.d.ts.map +1 -0
- package/dist/storage/indexeddb.js +95 -0
- package/dist/storage/indexeddb.js.map +1 -0
- package/dist/types.d.ts +79 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/ARCHITECTURE.md +227 -0
- package/docs/ARCHITECTURE.zh-CN.md +251 -0
- package/docs/USAGE.md +327 -0
- package/docs/USAGE.zh-CN.md +345 -0
- package/package.json +56 -0
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
# Topic Memory
|
|
2
|
+
|
|
3
|
+
**给现有 LLM 应用加上一层可插拔的长期对话记忆。**
|
|
4
|
+
|
|
5
|
+
[English](./README.md) · [详细接入指南](./docs/USAGE.zh-CN.md) · [架构与容量说明](./docs/ARCHITECTURE.zh-CN.md)
|
|
6
|
+
|
|
7
|
+
Topic Memory 是一个独立的 TypeScript SDK。它解决的不是“让模型拥有更大的 context window”,而是另一个更实际的问题:**当一段对话持续几百、几千轮以后,怎样让模型在需要时找回旧信息,而不是每次都把完整聊天记录重新塞进 prompt。**
|
|
8
|
+
|
|
9
|
+
它会保留完整的 Canonical Transcript,把较早的 completed exchanges 按 topic 组织成可检索的长期记忆;新消息到来时,只打开与当前问题相关的旧 topic,最后把恢复出的上下文作为 `memoryContext` 交给你自己的 Main LLM。
|
|
10
|
+
|
|
11
|
+
> **它是什么:** LLM 应用的长期记忆插件 / SDK。
|
|
12
|
+
> **它不是什么:** 聊天机器人、模型供应商,也不会替代你的 Main LLM。
|
|
13
|
+
|
|
14
|
+
## 它可以用来做什么?
|
|
15
|
+
|
|
16
|
+
适合需要长期连续性的聊天、AI 朋友、Agent 或长期项目助手,例如记住:
|
|
17
|
+
|
|
18
|
+
- 用户长期偏好、习惯、人物、地点和个人背景;
|
|
19
|
+
- 几百甚至几千个 exchange 以前做过的决定;
|
|
20
|
+
- 项目历史、需求变更、以前尝试过的方法和未完成事项;
|
|
21
|
+
- 某次旧对话的具体措辞、事件顺序或时间信息;
|
|
22
|
+
- 任何不适合永久占用 Main LLM context window、但未来可能需要重新找回的信息。
|
|
23
|
+
|
|
24
|
+
它和“只维护一份不断覆盖的聊天摘要”不同:Topic Memory 会保留原始 Canonical Transcript。检索命中一个 topic 后,可以根据这个 topic 保存的 transcript spans 重新打开当时的原始对话,而不是只能依赖一段已经压缩过的 summary。
|
|
25
|
+
|
|
26
|
+
## 先搞清楚三个角色
|
|
27
|
+
|
|
28
|
+
这是 v0.1 最容易被误解的地方。
|
|
29
|
+
|
|
30
|
+
### Topic Worker
|
|
31
|
+
|
|
32
|
+
Topic Worker 不负责回复用户。
|
|
33
|
+
|
|
34
|
+
它在对话进行过程中整理已经完成的 exchanges,把属于同一个讨论主题的连续或相关对话归到一个 topic 下,并保存:
|
|
35
|
+
|
|
36
|
+
- topic keywords;
|
|
37
|
+
- retrieval terms;
|
|
38
|
+
- 对应的原始 transcript spans;
|
|
39
|
+
- topic status;
|
|
40
|
+
- 时间信息。
|
|
41
|
+
|
|
42
|
+
它更像一个后台“记忆整理员”。
|
|
43
|
+
|
|
44
|
+
### Memory Selector
|
|
45
|
+
|
|
46
|
+
Memory Selector 也不回复用户。
|
|
47
|
+
|
|
48
|
+
新消息到来时,它会看:
|
|
49
|
+
|
|
50
|
+
- 当前用户消息;
|
|
51
|
+
- 最近 5 个 completed exchanges;
|
|
52
|
+
- Topic Directory。
|
|
53
|
+
|
|
54
|
+
然后最多选择 3 个可能相关的旧 topic。
|
|
55
|
+
|
|
56
|
+
SDK 再根据 topic 保存的 spans 回到 Canonical Transcript,恢复当时的原始对话细节,并生成 `memoryContext`。
|
|
57
|
+
|
|
58
|
+
### 你的 Main LLM
|
|
59
|
+
|
|
60
|
+
真正给用户写回复的仍然是你自己的 **Main LLM**。
|
|
61
|
+
|
|
62
|
+
**v0.1 默认可以只配置一个 Memory LLM,让同一个 Memory LLM 同时承担 Topic Worker 和 Memory Selector。这个 Memory LLM 不是 Main LLM。**
|
|
63
|
+
|
|
64
|
+
你当然也可以在自己的产品里让 Memory LLM 和 Main LLM 使用同一个底层模型供应商甚至同一个 model name,但在架构上它们的职责仍然分开:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
Memory LLM
|
|
68
|
+
├─ Topic Worker:整理记忆
|
|
69
|
+
└─ Memory Selector:寻找记忆
|
|
70
|
+
|
|
71
|
+
Your Main LLM
|
|
72
|
+
└─ 根据当前消息 + memoryContext 生成最终回复
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Topic Memory SDK 不会调用或接管你的 Main LLM。
|
|
76
|
+
|
|
77
|
+
## 工作原理
|
|
78
|
+
|
|
79
|
+
v0.1 的流程可以理解成六步。
|
|
80
|
+
|
|
81
|
+
### 1. Canonical Transcript:先保存原始事实
|
|
82
|
+
|
|
83
|
+
每一轮对话都会先进入 Canonical Transcript,并处于:
|
|
84
|
+
|
|
85
|
+
- `pending`
|
|
86
|
+
- `completed`
|
|
87
|
+
- `failed`
|
|
88
|
+
|
|
89
|
+
其中 completed exchange 才会被当作可靠的长期对话证据。
|
|
90
|
+
|
|
91
|
+
### 2. Topic Worker:把旧对话整理成“目录”
|
|
92
|
+
|
|
93
|
+
当至少存在 6 个 completed exchanges 后,Topic Worker 开始处理 active tail。
|
|
94
|
+
|
|
95
|
+
它不会简单地“一轮生成一个记忆”。它会把属于同一主题的多轮对话归为一个 topic,并记录这个 topic 对应原始对话的准确 span。
|
|
96
|
+
|
|
97
|
+
### 3. Topic Directory:只保留轻量索引
|
|
98
|
+
|
|
99
|
+
长期历史不会整段塞给 Selector。
|
|
100
|
+
|
|
101
|
+
Selector 先看到的是 Topic Directory——类似一本书的目录:它告诉模型“过去聊过什么”,但不会先把几千轮原文全部加载进来。
|
|
102
|
+
|
|
103
|
+
### 4. Memory Selector:定位可能相关的旧 topic
|
|
104
|
+
|
|
105
|
+
用户发来新消息后,Selector 根据当前问题、最近 5 个 exchanges 和 Topic Directory,最多选择 3 个相关 topic IDs。
|
|
106
|
+
|
|
107
|
+
### 5. Opened Topic Packet:回到原始对话
|
|
108
|
+
|
|
109
|
+
选中 topic 后,SDK 根据它保存的 spans,从 Canonical Transcript 中恢复真正的原始 user / assistant 对话。
|
|
110
|
+
|
|
111
|
+
如果用户问“什么时候”“当时”“多久以前”之类的问题,还可以一起恢复时间元数据。
|
|
112
|
+
|
|
113
|
+
### 6. Main LLM:拿到恢复出的记忆再回复
|
|
114
|
+
|
|
115
|
+
最终 SDK 返回:
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
retrieved.memoryContext
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
你的 Main LLM 可以把这段内容作为额外上下文使用。
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
Canonical Transcript
|
|
125
|
+
│
|
|
126
|
+
▼
|
|
127
|
+
Topic Worker
|
|
128
|
+
│
|
|
129
|
+
▼
|
|
130
|
+
Topic Store ─────→ Topic Directory
|
|
131
|
+
│
|
|
132
|
+
当前用户消息 ─────────────┤
|
|
133
|
+
最近 5 个 exchanges ──────┤
|
|
134
|
+
▼
|
|
135
|
+
Memory Selector
|
|
136
|
+
│
|
|
137
|
+
最多 3 个 topic
|
|
138
|
+
│
|
|
139
|
+
▼
|
|
140
|
+
Open Topic Packets
|
|
141
|
+
│
|
|
142
|
+
▼
|
|
143
|
+
memoryContext
|
|
144
|
+
│
|
|
145
|
+
▼
|
|
146
|
+
你的 Main LLM
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
如果 Selector 出错,SDK 会安全降级为长期 `memoryContext` 为空,而不是让整个聊天流程崩掉。
|
|
150
|
+
|
|
151
|
+
## 理论上能把“记忆跨度”提高多少?
|
|
152
|
+
|
|
153
|
+
Topic Memory 并不会魔法般扩大模型本身的 context window。它做的是把:
|
|
154
|
+
|
|
155
|
+
> **“总共保存了多少历史”**
|
|
156
|
+
|
|
157
|
+
和
|
|
158
|
+
|
|
159
|
+
> **“这一次请求真正送进模型多少历史”**
|
|
160
|
+
|
|
161
|
+
拆开。
|
|
162
|
+
|
|
163
|
+
以一个说明性的 128k context 场景为例:如果给历史记录大约 120k tokens,每个 completed exchange 平均约 200 tokens,那么传统“完整历史全部塞回 prompt”的方案大约在 **600 exchanges** 左右就已经接近预算。
|
|
164
|
+
|
|
165
|
+
如果使用 Topic Memory,并假设:
|
|
166
|
+
|
|
167
|
+
- 总历史:5,000 exchanges;
|
|
168
|
+
- 平均 8 exchanges 被整理成一个 topic;
|
|
169
|
+
- 每个 Topic Directory entry 平均约 60 tokens;
|
|
170
|
+
- 最近上下文保留 5 exchanges;
|
|
171
|
+
- 每次最多打开 3 个 topic;
|
|
172
|
+
|
|
173
|
+
那么这 5,000 exchanges 对应的 memory retrieval prompt,在这组假设下大约仍只有 **43k–45k tokens**。
|
|
174
|
+
|
|
175
|
+
也就是说,在这个示例模型里,能够被系统索引和按需恢复的历史跨度大约从 600 扩展到 5,000 exchanges,约 **8.3×**;同时不需要在每次回复时重放 5,000 exchanges 的全部原文。
|
|
176
|
+
|
|
177
|
+
**这不是硬上限,也不是性能 benchmark。** 它只是根据 v0.1 当前数据结构做的容量推算。真实结果取决于消息长度、tokenizer、平均 topic 大小、模型 context window 和 Topic Directory 的增长速度。
|
|
178
|
+
|
|
179
|
+
实际上,5,000 也不是存储层的最大值。v0.1 更早遇到的扩展瓶颈通常会是 Topic Directory 随 topic 数量线性增长。详细公式、假设和相关 long-context memory 研究放在 [架构与容量说明](./docs/ARCHITECTURE.zh-CN.md),不会影响正常安装和使用。
|
|
180
|
+
|
|
181
|
+
## 安装
|
|
182
|
+
|
|
183
|
+
当前版本以源码形式公开,可 clone 使用,也可以通过 `npm pack` 生成 tarball。
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
npm install
|
|
187
|
+
npm run build
|
|
188
|
+
npm pack
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## 配置 Memory LLM
|
|
192
|
+
|
|
193
|
+
内置 adapter 使用 OpenAI-compatible `/chat/completions` 协议:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
MEMORY_LLM_BASE_URL=https://your-openai-compatible-endpoint.example/v1
|
|
197
|
+
MEMORY_LLM_API_KEY=replace-me
|
|
198
|
+
MEMORY_LLM_MODEL=your-memory-model
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
不要把付费 API Key 放进公开前端 bundle。生产环境建议通过自己的后端或可信代理调用。
|
|
202
|
+
|
|
203
|
+
## 5 分钟接入
|
|
204
|
+
|
|
205
|
+
```ts
|
|
206
|
+
import {
|
|
207
|
+
createMemory,
|
|
208
|
+
createOpenAICompatibleMemoryLlm,
|
|
209
|
+
InMemoryStorage,
|
|
210
|
+
} from 'topic-memory';
|
|
211
|
+
|
|
212
|
+
const memoryLlm = createOpenAICompatibleMemoryLlm({
|
|
213
|
+
baseUrl: process.env.MEMORY_LLM_BASE_URL!,
|
|
214
|
+
apiKey: process.env.MEMORY_LLM_API_KEY,
|
|
215
|
+
model: process.env.MEMORY_LLM_MODEL!,
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
const memory = createMemory({
|
|
219
|
+
storage: new InMemoryStorage(),
|
|
220
|
+
llm: memoryLlm,
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
async function handleUserMessage(userMessage: string) {
|
|
224
|
+
const pending = await memory.begin(userMessage);
|
|
225
|
+
|
|
226
|
+
try {
|
|
227
|
+
const retrieved = await memory.retrieve({ userMessage });
|
|
228
|
+
|
|
229
|
+
// 这里是你自己原本就有的主聊天模型调用。
|
|
230
|
+
const assistantReply = await myOwnMainLlm({
|
|
231
|
+
userMessage,
|
|
232
|
+
memoryContext: retrieved.memoryContext,
|
|
233
|
+
recentContext: retrieved.recentContext,
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
await memory.completeExchange({
|
|
237
|
+
exchangeId: pending.id,
|
|
238
|
+
assistantText: assistantReply,
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
await memory.maybeRunTopicWorker();
|
|
242
|
+
return assistantReply;
|
|
243
|
+
} catch (error) {
|
|
244
|
+
await memory.failExchange({
|
|
245
|
+
exchangeId: pending.id,
|
|
246
|
+
failureReason: error instanceof Error ? error.message : String(error),
|
|
247
|
+
});
|
|
248
|
+
throw error;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
SDK **不会**调用 `myOwnMainLlm`。这个函数只是代表你现有 App 里的 Main LLM 调用。
|
|
254
|
+
|
|
255
|
+
完整接法请看 [docs/USAGE.zh-CN.md](./docs/USAGE.zh-CN.md)。
|
|
256
|
+
|
|
257
|
+
## 正确调用顺序
|
|
258
|
+
|
|
259
|
+
```text
|
|
260
|
+
用户消息
|
|
261
|
+
→ memory.begin()
|
|
262
|
+
→ memory.retrieve()
|
|
263
|
+
→ 你的 Main LLM
|
|
264
|
+
→ memory.completeExchange()
|
|
265
|
+
→ memory.maybeRunTopicWorker()
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
如果 Main LLM 在 `begin()` 之后调用失败,使用 `memory.failExchange(...)`。
|
|
269
|
+
|
|
270
|
+
## 前 6 个 completed exchanges
|
|
271
|
+
|
|
272
|
+
Topic Worker 在至少存在 **6 个 completed exchanges** 之前不会运行。
|
|
273
|
+
|
|
274
|
+
此时:
|
|
275
|
+
|
|
276
|
+
- Canonical Transcript 仍然正常保存;
|
|
277
|
+
- `recentContext` 仍然可用;
|
|
278
|
+
- 因为还没有 topic,`memoryContext` 可能为空。
|
|
279
|
+
|
|
280
|
+
这是正常行为。
|
|
281
|
+
|
|
282
|
+
## Public API
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
createMemory
|
|
286
|
+
MemoryEngine
|
|
287
|
+
InMemoryStorage
|
|
288
|
+
IndexedDbMemoryStorage
|
|
289
|
+
createOpenAICompatibleMemoryLlm
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
主要方法:
|
|
293
|
+
|
|
294
|
+
```ts
|
|
295
|
+
begin
|
|
296
|
+
beginExchange
|
|
297
|
+
completeExchange
|
|
298
|
+
failExchange
|
|
299
|
+
maybeRunTopicWorker
|
|
300
|
+
retrieve
|
|
301
|
+
listExchanges
|
|
302
|
+
listTopics
|
|
303
|
+
getLatestTopicWorkerRun
|
|
304
|
+
clear
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
`retrieve()` 返回:
|
|
308
|
+
|
|
309
|
+
```ts
|
|
310
|
+
{
|
|
311
|
+
recentContext,
|
|
312
|
+
topicDirectory,
|
|
313
|
+
selectedTopicIds,
|
|
314
|
+
openedTopicPackets,
|
|
315
|
+
memoryContext,
|
|
316
|
+
needsTimeMetadata,
|
|
317
|
+
trace,
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## 存储
|
|
322
|
+
|
|
323
|
+
Demo / 测试:
|
|
324
|
+
|
|
325
|
+
```ts
|
|
326
|
+
new InMemoryStorage()
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
浏览器持久化:
|
|
330
|
+
|
|
331
|
+
```ts
|
|
332
|
+
new IndexedDbMemoryStorage()
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
服务端生产环境可以实现导出的 `MemoryStorage` interface,接入自己的数据库。
|
|
336
|
+
|
|
337
|
+
## 高级配置
|
|
338
|
+
|
|
339
|
+
默认只需要一个 Memory LLM:
|
|
340
|
+
|
|
341
|
+
```ts
|
|
342
|
+
createMemory({ storage, llm: memoryLlm })
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
这个 Memory LLM 同时处理 Topic Worker 和 Selector。
|
|
346
|
+
|
|
347
|
+
也可以拆成两个:
|
|
348
|
+
|
|
349
|
+
```ts
|
|
350
|
+
createMemory({
|
|
351
|
+
storage,
|
|
352
|
+
topicWorker: topicWorkerLlm,
|
|
353
|
+
selector: selectorLlm,
|
|
354
|
+
});
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
无论哪种配置,都不会替代宿主应用自己的 Main LLM。
|
|
358
|
+
|
|
359
|
+
## 失败降级
|
|
360
|
+
|
|
361
|
+
- **Main LLM 调用失败:** 使用 `failExchange`;
|
|
362
|
+
- **Topic Worker provider 失败:** 记录失败并保留已有 topics;
|
|
363
|
+
- **Topic Worker 输出结构不合法:** 直接拒绝,不写入 Topic Store;
|
|
364
|
+
- **Selector 失败:** 长期 `memoryContext` 降级为空;
|
|
365
|
+
- **当前问题不需要旧记忆:** `memoryContext` 本来就应该为空。
|
|
366
|
+
|
|
367
|
+
## 验证
|
|
368
|
+
|
|
369
|
+
仓库 CI 会按真实第三方项目的使用方式验证 package:
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
npm run build
|
|
373
|
+
npm run typecheck
|
|
374
|
+
npm test
|
|
375
|
+
npm pack --dry-run
|
|
376
|
+
npm run smoke:consumer
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
`smoke:consumer` 会把 SDK 打包,安装进一个全新的临时 Node 项目,只通过 public package exports 导入,然后运行完整 memory pipeline,并验证模拟的宿主 Main LLM 最终收到非空 `memoryContext`。
|
|
380
|
+
|
|
381
|
+
## 非目标
|
|
382
|
+
|
|
383
|
+
v0.1 不管理 Persona、Big Five、Relationship、Proactive Messaging、UI、embedding、vector database,也不管理宿主应用的 Main LLM。
|
|
384
|
+
|
|
385
|
+
## License
|
|
386
|
+
|
|
387
|
+
MIT
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CanonicalExchange, CanonicalTopic, LatestTopicWorkerRun, MemoryLlm, MemoryStorage, RetrieveResult, TopicWorkerResult } from './types.js';
|
|
2
|
+
export interface MemoryEngineOptions {
|
|
3
|
+
storage: MemoryStorage;
|
|
4
|
+
llm?: MemoryLlm;
|
|
5
|
+
topicWorker?: MemoryLlm;
|
|
6
|
+
selector?: MemoryLlm;
|
|
7
|
+
now?: () => number;
|
|
8
|
+
}
|
|
9
|
+
export declare class MemoryEngine {
|
|
10
|
+
private readonly storage;
|
|
11
|
+
private readonly topicWorker;
|
|
12
|
+
private readonly selector;
|
|
13
|
+
private readonly now;
|
|
14
|
+
constructor(options: MemoryEngineOptions);
|
|
15
|
+
begin(userText: string): Promise<CanonicalExchange>;
|
|
16
|
+
beginExchange(input: {
|
|
17
|
+
userText: string;
|
|
18
|
+
userSentAt?: number;
|
|
19
|
+
}): Promise<CanonicalExchange>;
|
|
20
|
+
completeExchange(input: {
|
|
21
|
+
exchangeId: string;
|
|
22
|
+
assistantText: string;
|
|
23
|
+
assistantCompletedAt?: number;
|
|
24
|
+
}): Promise<CanonicalExchange>;
|
|
25
|
+
failExchange(input: {
|
|
26
|
+
exchangeId: string;
|
|
27
|
+
failureReason: string;
|
|
28
|
+
assistantCompletedAt?: number;
|
|
29
|
+
}): Promise<CanonicalExchange>;
|
|
30
|
+
maybeRunTopicWorker(): Promise<TopicWorkerResult>;
|
|
31
|
+
retrieve(input: {
|
|
32
|
+
userMessage: string;
|
|
33
|
+
now?: number;
|
|
34
|
+
}): Promise<RetrieveResult>;
|
|
35
|
+
listExchanges(): Promise<CanonicalExchange[]>;
|
|
36
|
+
listTopics(): Promise<CanonicalTopic[]>;
|
|
37
|
+
getLatestTopicWorkerRun(): Promise<LatestTopicWorkerRun | null>;
|
|
38
|
+
clear(): Promise<void>;
|
|
39
|
+
private requireExchange;
|
|
40
|
+
}
|
|
41
|
+
export declare function createMemory(options: MemoryEngineOptions): MemoryEngine;
|
|
42
|
+
export declare function stripCanonicalAssistantProtocolTags(text: string): string;
|
|
43
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAwB,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK7K,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAKD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,OAAO,EAAE,mBAAmB;IASlC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAEnD,aAAa,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmB3F,gBAAgB,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAajI,YAAY,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY7H,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAuDjD,QAAQ,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IA6C/E,aAAa,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC7C,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACvC,uBAAuB,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAC/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,eAAe;CAK9B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAAsC;AAE9G,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxE"}
|