indusagi 0.12.13 → 0.12.15
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/agent/tools/registry.d.ts +1 -1
- package/dist/agent/tools/registry.d.ts.map +1 -1
- package/dist/agent/types.d.ts +1 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/ai/models.generated.d.ts +621 -53
- package/dist/ai/models.generated.d.ts.map +1 -1
- package/dist/ai/models.generated.js +548 -0
- package/dist/ai/models.generated.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/client-pool.d.ts +106 -0
- package/dist/mcp/client-pool.d.ts.map +1 -0
- package/dist/mcp/client-pool.js +233 -0
- package/dist/mcp/client-pool.js.map +1 -0
- package/dist/mcp/client.d.ts +158 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +586 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +61 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +250 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/errors.d.ts +104 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +138 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +56 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +83 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/schema-converter.d.ts +68 -0
- package/dist/mcp/schema-converter.d.ts.map +1 -0
- package/dist/mcp/schema-converter.js +230 -0
- package/dist/mcp/schema-converter.js.map +1 -0
- package/dist/mcp/server.d.ts +111 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +300 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tool-factory.d.ts +63 -0
- package/dist/mcp/tool-factory.d.ts.map +1 -0
- package/dist/mcp/tool-factory.js +228 -0
- package/dist/mcp/tool-factory.js.map +1 -0
- package/dist/mcp/types.d.ts +289 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +8 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp.d.ts +6 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +6 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory/embedder/base.d.ts +41 -0
- package/dist/memory/embedder/base.d.ts.map +1 -0
- package/dist/memory/embedder/base.js +10 -0
- package/dist/memory/embedder/base.js.map +1 -0
- package/dist/memory/embedder/index.d.ts +8 -0
- package/dist/memory/embedder/index.d.ts.map +1 -0
- package/dist/memory/embedder/index.js +6 -0
- package/dist/memory/embedder/index.js.map +1 -0
- package/dist/memory/embedder/openai.d.ts +35 -0
- package/dist/memory/embedder/openai.d.ts.map +1 -0
- package/dist/memory/embedder/openai.js +103 -0
- package/dist/memory/embedder/openai.js.map +1 -0
- package/dist/memory/index.d.ts +33 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +31 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory.d.ts +126 -0
- package/dist/memory/memory.d.ts.map +1 -0
- package/dist/memory/memory.js +280 -0
- package/dist/memory/memory.js.map +1 -0
- package/dist/memory/processors/base.d.ts +42 -0
- package/dist/memory/processors/base.d.ts.map +1 -0
- package/dist/memory/processors/base.js +6 -0
- package/dist/memory/processors/base.js.map +1 -0
- package/dist/memory/processors/index.d.ts +16 -0
- package/dist/memory/processors/index.d.ts.map +1 -0
- package/dist/memory/processors/index.js +18 -0
- package/dist/memory/processors/index.js.map +1 -0
- package/dist/memory/processors/message-history.d.ts +35 -0
- package/dist/memory/processors/message-history.d.ts.map +1 -0
- package/dist/memory/processors/message-history.js +51 -0
- package/dist/memory/processors/message-history.js.map +1 -0
- package/dist/memory/processors/observational-memory/index.d.ts +82 -0
- package/dist/memory/processors/observational-memory/index.d.ts.map +1 -0
- package/dist/memory/processors/observational-memory/index.js +234 -0
- package/dist/memory/processors/observational-memory/index.js.map +1 -0
- package/dist/memory/processors/observational-memory/observer-agent.d.ts +64 -0
- package/dist/memory/processors/observational-memory/observer-agent.d.ts.map +1 -0
- package/dist/memory/processors/observational-memory/observer-agent.js +362 -0
- package/dist/memory/processors/observational-memory/observer-agent.js.map +1 -0
- package/dist/memory/processors/observational-memory/reflector-agent.d.ts +38 -0
- package/dist/memory/processors/observational-memory/reflector-agent.d.ts.map +1 -0
- package/dist/memory/processors/observational-memory/reflector-agent.js +213 -0
- package/dist/memory/processors/observational-memory/reflector-agent.js.map +1 -0
- package/dist/memory/processors/observational-memory/token-counter.d.ts +35 -0
- package/dist/memory/processors/observational-memory/token-counter.d.ts.map +1 -0
- package/dist/memory/processors/observational-memory/token-counter.js +90 -0
- package/dist/memory/processors/observational-memory/token-counter.js.map +1 -0
- package/dist/memory/processors/semantic-recall.d.ts +55 -0
- package/dist/memory/processors/semantic-recall.d.ts.map +1 -0
- package/dist/memory/processors/semantic-recall.js +143 -0
- package/dist/memory/processors/semantic-recall.js.map +1 -0
- package/dist/memory/processors/working-memory.d.ts +41 -0
- package/dist/memory/processors/working-memory.d.ts.map +1 -0
- package/dist/memory/processors/working-memory.js +82 -0
- package/dist/memory/processors/working-memory.js.map +1 -0
- package/dist/memory/storage/base.d.ts +288 -0
- package/dist/memory/storage/base.d.ts.map +1 -0
- package/dist/memory/storage/base.js +211 -0
- package/dist/memory/storage/base.js.map +1 -0
- package/dist/memory/storage/index.d.ts +9 -0
- package/dist/memory/storage/index.d.ts.map +1 -0
- package/dist/memory/storage/index.js +7 -0
- package/dist/memory/storage/index.js.map +1 -0
- package/dist/memory/storage/inmemory.d.ts +93 -0
- package/dist/memory/storage/inmemory.d.ts.map +1 -0
- package/dist/memory/storage/inmemory.js +646 -0
- package/dist/memory/storage/inmemory.js.map +1 -0
- package/dist/memory/tools/working-memory.d.ts +100 -0
- package/dist/memory/tools/working-memory.d.ts.map +1 -0
- package/dist/memory/tools/working-memory.js +237 -0
- package/dist/memory/tools/working-memory.js.map +1 -0
- package/dist/memory/types.d.ts +386 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +58 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/vector/base.d.ts +145 -0
- package/dist/memory/vector/base.d.ts.map +1 -0
- package/dist/memory/vector/base.js +83 -0
- package/dist/memory/vector/base.js.map +1 -0
- package/dist/memory/vector/index.d.ts +8 -0
- package/dist/memory/vector/index.d.ts.map +1 -0
- package/dist/memory/vector/index.js +7 -0
- package/dist/memory/vector/index.js.map +1 -0
- package/dist/memory/vector/inmemory.d.ts +47 -0
- package/dist/memory/vector/inmemory.d.ts.map +1 -0
- package/dist/memory/vector/inmemory.js +234 -0
- package/dist/memory/vector/inmemory.js.map +1 -0
- package/package.json +32 -2
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Counter Utility
|
|
3
|
+
* Based on Mastra TokenCounter
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Simple token counter using character-based estimation.
|
|
7
|
+
* For production, integrate with js-tiktoken for accurate counting.
|
|
8
|
+
*/
|
|
9
|
+
export class TokenCounter {
|
|
10
|
+
// Average characters per token (OpenAI's estimation)
|
|
11
|
+
static { this.CHARS_PER_TOKEN = 4; }
|
|
12
|
+
// Per-message overhead for role tokens, framing, separators
|
|
13
|
+
static { this.TOKENS_PER_MESSAGE = 3.8; }
|
|
14
|
+
// Conversation-level overhead
|
|
15
|
+
static { this.TOKENS_PER_CONVERSATION = 24; }
|
|
16
|
+
/**
|
|
17
|
+
* Count tokens in a plain string
|
|
18
|
+
*/
|
|
19
|
+
countString(text) {
|
|
20
|
+
if (!text)
|
|
21
|
+
return 0;
|
|
22
|
+
// Simple estimation: characters / 4
|
|
23
|
+
// For production, use tiktoken for accurate counting
|
|
24
|
+
return Math.ceil(text.length / TokenCounter.CHARS_PER_TOKEN);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Count tokens in a single message
|
|
28
|
+
*/
|
|
29
|
+
countMessage(message) {
|
|
30
|
+
let tokenString = message.role;
|
|
31
|
+
let overhead = TokenCounter.TOKENS_PER_MESSAGE;
|
|
32
|
+
if (typeof message.content === "string") {
|
|
33
|
+
tokenString += message.content;
|
|
34
|
+
}
|
|
35
|
+
else if (message.content && typeof message.content === "object") {
|
|
36
|
+
const content = message.content;
|
|
37
|
+
if (content.content && !Array.isArray(content.parts)) {
|
|
38
|
+
tokenString += content.content;
|
|
39
|
+
}
|
|
40
|
+
else if (Array.isArray(content.parts)) {
|
|
41
|
+
for (const part of content.parts) {
|
|
42
|
+
if (part.type === "text") {
|
|
43
|
+
tokenString += part.text;
|
|
44
|
+
}
|
|
45
|
+
else if (part.type === "tool-call") {
|
|
46
|
+
tokenString += part.toolName;
|
|
47
|
+
if (part.args) {
|
|
48
|
+
tokenString += JSON.stringify(part.args);
|
|
49
|
+
overhead -= 12; // Compensate for JSON overhead
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (part.type === "tool-result") {
|
|
53
|
+
if (part.result !== undefined) {
|
|
54
|
+
tokenString += typeof part.result === "string"
|
|
55
|
+
? part.result
|
|
56
|
+
: JSON.stringify(part.result);
|
|
57
|
+
overhead -= 12;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return Math.round(this.countString(tokenString) + overhead);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Count tokens in an array of messages
|
|
67
|
+
*/
|
|
68
|
+
countMessages(messages) {
|
|
69
|
+
if (!messages || messages.length === 0)
|
|
70
|
+
return 0;
|
|
71
|
+
let total = TokenCounter.TOKENS_PER_CONVERSATION;
|
|
72
|
+
for (const message of messages) {
|
|
73
|
+
total += this.countMessage(message);
|
|
74
|
+
}
|
|
75
|
+
return total;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Count tokens in observations string
|
|
79
|
+
*/
|
|
80
|
+
countObservations(observations) {
|
|
81
|
+
return this.countString(observations);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create a default token counter instance
|
|
86
|
+
*/
|
|
87
|
+
export function createTokenCounter() {
|
|
88
|
+
return new TokenCounter();
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=token-counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../../../../src/memory/processors/observational-memory/token-counter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Recall Processor
|
|
3
|
+
* Based on Mastra SemanticRecall processor
|
|
4
|
+
*/
|
|
5
|
+
import type { MemoryProcessor, ProcessorContext } from "./base.js";
|
|
6
|
+
import type { CoreMessage, EmbedderOptions } from "../types.js";
|
|
7
|
+
import type { MemoryStorage } from "../storage/base.js";
|
|
8
|
+
import type { VectorStore } from "../vector/base.js";
|
|
9
|
+
import type { Embedder } from "../embedder/base.js";
|
|
10
|
+
/**
|
|
11
|
+
* Semantic recall processor configuration
|
|
12
|
+
*/
|
|
13
|
+
export interface SemanticRecallProcessorConfig {
|
|
14
|
+
storage: MemoryStorage;
|
|
15
|
+
vector: VectorStore;
|
|
16
|
+
embedder: Embedder;
|
|
17
|
+
embedderOptions?: EmbedderOptions;
|
|
18
|
+
indexName: string;
|
|
19
|
+
topK?: number;
|
|
20
|
+
messageRange?: number | {
|
|
21
|
+
before: number;
|
|
22
|
+
after: number;
|
|
23
|
+
};
|
|
24
|
+
scope?: "thread" | "resource";
|
|
25
|
+
threshold?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Semantic Recall Processor
|
|
29
|
+
*
|
|
30
|
+
* Retrieves relevant past messages using vector similarity search.
|
|
31
|
+
*/
|
|
32
|
+
export declare class SemanticRecall implements MemoryProcessor {
|
|
33
|
+
readonly id = "semantic-recall";
|
|
34
|
+
readonly name = "Semantic Recall Processor";
|
|
35
|
+
private storage;
|
|
36
|
+
private vector;
|
|
37
|
+
private embedder;
|
|
38
|
+
private embedderOptions?;
|
|
39
|
+
private indexName;
|
|
40
|
+
private topK;
|
|
41
|
+
private messageRange;
|
|
42
|
+
private scope;
|
|
43
|
+
private threshold;
|
|
44
|
+
constructor(config: SemanticRecallProcessorConfig);
|
|
45
|
+
processInputStep(args: {
|
|
46
|
+
messages: CoreMessage[];
|
|
47
|
+
context: ProcessorContext;
|
|
48
|
+
}): Promise<CoreMessage[]>;
|
|
49
|
+
processOutputResult(args: {
|
|
50
|
+
messages: CoreMessage[];
|
|
51
|
+
context: ProcessorContext;
|
|
52
|
+
}): Promise<CoreMessage[]>;
|
|
53
|
+
private messageToText;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=semantic-recall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-recall.d.ts","sourceRoot":"","sources":["../../../src/memory/processors/semantic-recall.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAA0C,eAAe,EAAE,MAAM,aAAa,CAAC;AACxG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,KAAK,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD;;;;GAIG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,EAAE,qBAAqB;IAChC,QAAQ,CAAC,IAAI,+BAA+B;IAE5C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,6BAA6B;IAY3C,gBAAgB,CAAC,IAAI,EAAE;QAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,OAAO,EAAE,gBAAgB,CAAC;KAC3B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkFpB,mBAAmB,CAAC,IAAI,EAAE;QAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,OAAO,EAAE,gBAAgB,CAAC;KAC3B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAsC1B,OAAO,CAAC,aAAa;CAatB"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Recall Processor
|
|
3
|
+
* Based on Mastra SemanticRecall processor
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Default message range configuration
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_MESSAGE_RANGE = { before: 1, after: 1 };
|
|
9
|
+
const DEFAULT_TOP_K = 4;
|
|
10
|
+
/**
|
|
11
|
+
* Semantic Recall Processor
|
|
12
|
+
*
|
|
13
|
+
* Retrieves relevant past messages using vector similarity search.
|
|
14
|
+
*/
|
|
15
|
+
export class SemanticRecall {
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.id = "semantic-recall";
|
|
18
|
+
this.name = "Semantic Recall Processor";
|
|
19
|
+
this.storage = config.storage;
|
|
20
|
+
this.vector = config.vector;
|
|
21
|
+
this.embedder = config.embedder;
|
|
22
|
+
this.embedderOptions = config.embedderOptions;
|
|
23
|
+
this.indexName = config.indexName;
|
|
24
|
+
this.topK = config.topK ?? DEFAULT_TOP_K;
|
|
25
|
+
this.messageRange = config.messageRange ?? DEFAULT_MESSAGE_RANGE;
|
|
26
|
+
this.scope = config.scope ?? "resource";
|
|
27
|
+
this.threshold = config.threshold ?? 0.7;
|
|
28
|
+
}
|
|
29
|
+
async processInputStep(args) {
|
|
30
|
+
const { messages, context } = args;
|
|
31
|
+
// Get the last user message as query
|
|
32
|
+
const lastUserMessage = [...messages].reverse().find(m => m.role === "user");
|
|
33
|
+
if (!lastUserMessage)
|
|
34
|
+
return messages;
|
|
35
|
+
const queryText = this.messageToText(lastUserMessage);
|
|
36
|
+
// Embed the query
|
|
37
|
+
const { vector: queryVector } = await this.embedder.embed(queryText, this.embedderOptions);
|
|
38
|
+
// Search for similar messages
|
|
39
|
+
const results = await this.vector.query({
|
|
40
|
+
indexName: this.indexName,
|
|
41
|
+
queryVector,
|
|
42
|
+
topK: this.topK,
|
|
43
|
+
minScore: this.threshold,
|
|
44
|
+
filter: {
|
|
45
|
+
resourceId: context.resourceId,
|
|
46
|
+
...(this.scope === "thread" && { threadId: context.threadId }),
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
if (results.length === 0)
|
|
50
|
+
return messages;
|
|
51
|
+
// Get message context (before/after each match)
|
|
52
|
+
const messageRange = typeof this.messageRange === "number"
|
|
53
|
+
? { before: this.messageRange, after: this.messageRange }
|
|
54
|
+
: this.messageRange;
|
|
55
|
+
const retrievedMessages = [];
|
|
56
|
+
const retrievedIds = new Set();
|
|
57
|
+
for (const result of results) {
|
|
58
|
+
const msgId = result.metadata?.messageId;
|
|
59
|
+
const msgThreadId = result.metadata?.threadId;
|
|
60
|
+
if (!msgId || !msgThreadId)
|
|
61
|
+
continue;
|
|
62
|
+
// Get surrounding messages
|
|
63
|
+
const { messages: threadMessages } = await this.storage.listMessages({
|
|
64
|
+
threadId: msgThreadId,
|
|
65
|
+
perPage: 1000, // Get all messages to find context
|
|
66
|
+
});
|
|
67
|
+
const msgIndex = threadMessages.findIndex(m => m.id === msgId);
|
|
68
|
+
if (msgIndex === -1)
|
|
69
|
+
continue;
|
|
70
|
+
const start = Math.max(0, msgIndex - messageRange.before);
|
|
71
|
+
const end = Math.min(threadMessages.length, msgIndex + messageRange.after + 1);
|
|
72
|
+
for (let i = start; i < end; i++) {
|
|
73
|
+
const msg = threadMessages[i];
|
|
74
|
+
if (msg && !retrievedIds.has(msg.id)) {
|
|
75
|
+
retrievedMessages.push(msg);
|
|
76
|
+
retrievedIds.add(msg.id);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (retrievedMessages.length === 0)
|
|
81
|
+
return messages;
|
|
82
|
+
// Sort retrieved messages by date
|
|
83
|
+
retrievedMessages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
|
|
84
|
+
// Remove duplicates from original messages
|
|
85
|
+
const filteredMessages = messages.filter(m => !retrievedIds.has(m.id));
|
|
86
|
+
// Insert semantic recall marker
|
|
87
|
+
const recallMarker = {
|
|
88
|
+
id: `semantic-recall-${Date.now()}`,
|
|
89
|
+
role: "system",
|
|
90
|
+
content: `<semantic_recall>\nRelevant past conversation retrieved based on semantic similarity:\n</semantic_recall>`,
|
|
91
|
+
createdAt: new Date(),
|
|
92
|
+
};
|
|
93
|
+
return [recallMarker, ...retrievedMessages, ...filteredMessages];
|
|
94
|
+
}
|
|
95
|
+
async processOutputResult(args) {
|
|
96
|
+
const { messages, context } = args;
|
|
97
|
+
// Embed and store new messages
|
|
98
|
+
for (const message of messages) {
|
|
99
|
+
if (message.role !== "user" && message.role !== "assistant")
|
|
100
|
+
continue;
|
|
101
|
+
if (message.id.startsWith("working-memory-") || message.id.startsWith("semantic-recall-"))
|
|
102
|
+
continue;
|
|
103
|
+
const text = this.messageToText(message);
|
|
104
|
+
if (!text.trim())
|
|
105
|
+
continue;
|
|
106
|
+
try {
|
|
107
|
+
const { vector } = await this.embedder.embed(text, this.embedderOptions);
|
|
108
|
+
await this.vector.upsert({
|
|
109
|
+
indexName: this.indexName,
|
|
110
|
+
vectors: [vector],
|
|
111
|
+
metadata: [{
|
|
112
|
+
messageId: message.id,
|
|
113
|
+
threadId: context.threadId,
|
|
114
|
+
resourceId: context.resourceId,
|
|
115
|
+
role: message.role,
|
|
116
|
+
timestamp: new Date(message.createdAt).getTime(),
|
|
117
|
+
}],
|
|
118
|
+
ids: [`${context.threadId}-${message.id}`],
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error(`Failed to embed message ${message.id}:`, error);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return messages;
|
|
126
|
+
}
|
|
127
|
+
// ========================================================================
|
|
128
|
+
// Private Helpers
|
|
129
|
+
// ========================================================================
|
|
130
|
+
messageToText(message) {
|
|
131
|
+
if (typeof message.content === "string")
|
|
132
|
+
return message.content;
|
|
133
|
+
const content = message.content;
|
|
134
|
+
if (content.parts) {
|
|
135
|
+
return content.parts
|
|
136
|
+
.filter((p) => p.type === "text")
|
|
137
|
+
.map(p => p.text)
|
|
138
|
+
.join("\n");
|
|
139
|
+
}
|
|
140
|
+
return content.content ?? "";
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=semantic-recall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-recall.js","sourceRoot":"","sources":["../../../src/memory/processors/semantic-recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working Memory Processor
|
|
3
|
+
* Based on Mastra WorkingMemory processor
|
|
4
|
+
*/
|
|
5
|
+
import type { MemoryProcessor, ProcessorContext } from "./base.js";
|
|
6
|
+
import type { CoreMessage, WorkingMemoryTemplate } from "../types.js";
|
|
7
|
+
import type { MemoryStorage } from "../storage/base.js";
|
|
8
|
+
/**
|
|
9
|
+
* Working memory processor configuration
|
|
10
|
+
*/
|
|
11
|
+
export interface WorkingMemoryProcessorConfig {
|
|
12
|
+
storage: MemoryStorage;
|
|
13
|
+
template?: WorkingMemoryTemplate;
|
|
14
|
+
scope?: "thread" | "resource";
|
|
15
|
+
useVNext?: boolean;
|
|
16
|
+
templateProvider?: {
|
|
17
|
+
getWorkingMemoryTemplate(args: {
|
|
18
|
+
memoryConfig?: import("../types.js").MemoryConfig;
|
|
19
|
+
}): Promise<WorkingMemoryTemplate | null>;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Working Memory Processor
|
|
24
|
+
*
|
|
25
|
+
* Injects structured context (user profile, preferences) into the conversation.
|
|
26
|
+
*/
|
|
27
|
+
export declare class WorkingMemory implements MemoryProcessor {
|
|
28
|
+
readonly id = "working-memory";
|
|
29
|
+
readonly name = "Working Memory Processor";
|
|
30
|
+
private storage;
|
|
31
|
+
private template?;
|
|
32
|
+
private scope;
|
|
33
|
+
private useVNext;
|
|
34
|
+
private templateProvider?;
|
|
35
|
+
constructor(config: WorkingMemoryProcessorConfig);
|
|
36
|
+
processInputStep(args: {
|
|
37
|
+
messages: CoreMessage[];
|
|
38
|
+
context: ProcessorContext;
|
|
39
|
+
}): Promise<CoreMessage[]>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=working-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-memory.d.ts","sourceRoot":"","sources":["../../../src/memory/processors/working-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,KAAK,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE;QACjB,wBAAwB,CAAC,IAAI,EAAE;YAAE,YAAY,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,CAAA;SAAE,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;KAC9H,CAAC;CACH;AAqBD;;;;GAIG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,EAAE,oBAAoB;IAC/B,QAAQ,CAAC,IAAI,8BAA8B;IAE3C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAmD;gBAEhE,MAAM,EAAE,4BAA4B;IAQ1C,gBAAgB,CAAC,IAAI,EAAE;QAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,OAAO,EAAE,gBAAgB,CAAC;KAC3B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAmD3B"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working Memory Processor
|
|
3
|
+
* Based on Mastra WorkingMemory processor
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Default working memory template
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_TEMPLATE = {
|
|
9
|
+
format: "markdown",
|
|
10
|
+
content: `
|
|
11
|
+
# User Information
|
|
12
|
+
- **First Name**:
|
|
13
|
+
- **Last Name**:
|
|
14
|
+
- **Location**:
|
|
15
|
+
- **Occupation**:
|
|
16
|
+
- **Interests**:
|
|
17
|
+
- **Goals**:
|
|
18
|
+
- **Events**:
|
|
19
|
+
- **Facts**:
|
|
20
|
+
- **Projects**:
|
|
21
|
+
`,
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Working Memory Processor
|
|
25
|
+
*
|
|
26
|
+
* Injects structured context (user profile, preferences) into the conversation.
|
|
27
|
+
*/
|
|
28
|
+
export class WorkingMemory {
|
|
29
|
+
constructor(config) {
|
|
30
|
+
this.id = "working-memory";
|
|
31
|
+
this.name = "Working Memory Processor";
|
|
32
|
+
this.storage = config.storage;
|
|
33
|
+
this.template = config.template;
|
|
34
|
+
this.scope = config.scope ?? "resource";
|
|
35
|
+
this.useVNext = config.useVNext ?? false;
|
|
36
|
+
this.templateProvider = config.templateProvider;
|
|
37
|
+
}
|
|
38
|
+
async processInputStep(args) {
|
|
39
|
+
const { messages, context } = args;
|
|
40
|
+
const { threadId, resourceId, memoryConfig } = context;
|
|
41
|
+
// Determine scope from config
|
|
42
|
+
const scope = memoryConfig?.workingMemory &&
|
|
43
|
+
typeof memoryConfig.workingMemory === "object" &&
|
|
44
|
+
"scope" in memoryConfig.workingMemory
|
|
45
|
+
? memoryConfig.workingMemory.scope
|
|
46
|
+
: this.scope;
|
|
47
|
+
let workingMemory;
|
|
48
|
+
// Get working memory from storage
|
|
49
|
+
if (scope === "thread") {
|
|
50
|
+
const thread = await this.storage.getThreadById({ threadId });
|
|
51
|
+
workingMemory = thread?.metadata?.workingMemory;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const resource = await this.storage.getResourceById({ resourceId });
|
|
55
|
+
workingMemory = resource?.workingMemory;
|
|
56
|
+
}
|
|
57
|
+
// If no working memory exists, use template
|
|
58
|
+
if (!workingMemory) {
|
|
59
|
+
// Try to get template from provider or use local template
|
|
60
|
+
let template = this.template;
|
|
61
|
+
if (this.templateProvider && memoryConfig) {
|
|
62
|
+
const providerTemplate = await this.templateProvider.getWorkingMemoryTemplate({ memoryConfig });
|
|
63
|
+
if (providerTemplate) {
|
|
64
|
+
template = providerTemplate;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (!template) {
|
|
68
|
+
template = DEFAULT_TEMPLATE;
|
|
69
|
+
}
|
|
70
|
+
workingMemory = template.content;
|
|
71
|
+
}
|
|
72
|
+
// Inject as system message at the start
|
|
73
|
+
const workingMemoryMessage = {
|
|
74
|
+
id: `working-memory-${Date.now()}`,
|
|
75
|
+
role: "system",
|
|
76
|
+
content: `<working_memory>\n${workingMemory}\n</working_memory>`,
|
|
77
|
+
createdAt: new Date(),
|
|
78
|
+
};
|
|
79
|
+
return [workingMemoryMessage, ...messages];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=working-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-memory.js","sourceRoot":"","sources":["../../../src/memory/processors/working-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH;;GAEG;AACH,MAAM,gBAAgB,GAA0B;IAC9C,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE;;;;;;;;;;;CAWV;CACA,CAAC;AAEF;;;;GAIG;AACH,MAAM,OAAO,aAAa;IAUxB,YAAY,MAAoC;QATvC,OAAE,GAAG,gBAAgB,CAAC;QACtB,SAAI,GAAG,0BAA0B,CAAC;QASzC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAGtB;QACC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QAEvD,8BAA8B;QAC9B,MAAM,KAAK,GAAG,YAAY,EAAE,aAAa;YACvC,OAAO,YAAY,CAAC,aAAa,KAAK,QAAQ;YAC9C,OAAO,IAAI,YAAY,CAAC,aAAa;YACnC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK;YAClC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAEjB,IAAI,aAAwC,CAAC;QAE7C,kCAAkC;QAClC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9D,aAAa,GAAG,MAAM,EAAE,QAAQ,EAAE,aAAmC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YACpE,aAAa,GAAG,QAAQ,EAAE,aAAa,CAAC;QAC1C,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,0DAA0D;YAC1D,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE7B,IAAI,IAAI,CAAC,gBAAgB,IAAI,YAAY,EAAE,CAAC;gBAC1C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;gBAChG,IAAI,gBAAgB,EAAE,CAAC;oBACrB,QAAQ,GAAG,gBAAgB,CAAC;gBAC9B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,gBAAgB,CAAC;YAC9B,CAAC;YAED,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;QACnC,CAAC;QAED,wCAAwC;QACxC,MAAM,oBAAoB,GAAgB;YACxC,EAAE,EAAE,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,qBAAqB,aAAa,qBAAqB;YAChE,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,OAAO,CAAC,oBAAoB,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC7C,CAAC;CACF"}
|