@matteuccimarco/slim-langchain 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 +222 -0
- package/dist/chunk-XICIEIQL.mjs +178 -0
- package/dist/chunk-XICIEIQL.mjs.map +1 -0
- package/dist/index.d.mts +43 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +250 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +49 -0
- package/dist/index.mjs.map +1 -0
- package/dist/memory-Btlz_Pf_.d.mts +192 -0
- package/dist/memory-Btlz_Pf_.d.ts +192 -0
- package/dist/memory.d.mts +1 -0
- package/dist/memory.d.ts +1 -0
- package/dist/memory.js +203 -0
- package/dist/memory.js.map +1 -0
- package/dist/memory.mjs +11 -0
- package/dist/memory.mjs.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SLIM LangChain Types
|
|
3
|
+
*/
|
|
4
|
+
interface SlimSerializeOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Use table format for arrays of objects (more compression)
|
|
7
|
+
* @default true
|
|
8
|
+
*/
|
|
9
|
+
useTableFormat?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface SlimMemoryOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Enable SLIM compression
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Session ID for the memory
|
|
19
|
+
*/
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
}
|
|
22
|
+
interface Message {
|
|
23
|
+
role: 'human' | 'ai' | 'system' | 'function';
|
|
24
|
+
content: string;
|
|
25
|
+
name?: string;
|
|
26
|
+
additionalKwargs?: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
interface SerializedMemory {
|
|
29
|
+
messages: Message[];
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* SLIM Memory implementations for LangChain
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Chat message history with SLIM compression
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const history = new SlimChatMessageHistory();
|
|
43
|
+
* history.addUserMessage("Hello");
|
|
44
|
+
* history.addAIMessage("Hi there!");
|
|
45
|
+
*
|
|
46
|
+
* // Export as SLIM (40% smaller)
|
|
47
|
+
* const slim = history.toSlim();
|
|
48
|
+
*
|
|
49
|
+
* // Import from SLIM
|
|
50
|
+
* const restored = SlimChatMessageHistory.fromSlim(slim);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
declare class SlimChatMessageHistory {
|
|
54
|
+
private messages;
|
|
55
|
+
private sessionId;
|
|
56
|
+
private enabled;
|
|
57
|
+
constructor(options?: SlimMemoryOptions);
|
|
58
|
+
/**
|
|
59
|
+
* Add a human/user message
|
|
60
|
+
*/
|
|
61
|
+
addUserMessage(content: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Add an AI/assistant message
|
|
64
|
+
*/
|
|
65
|
+
addAIMessage(content: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Add a system message
|
|
68
|
+
*/
|
|
69
|
+
addSystemMessage(content: string): void;
|
|
70
|
+
/**
|
|
71
|
+
* Add a function message
|
|
72
|
+
*/
|
|
73
|
+
addFunctionMessage(content: string, name: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* Add a generic message
|
|
76
|
+
*/
|
|
77
|
+
addMessage(message: Message): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get all messages
|
|
80
|
+
*/
|
|
81
|
+
getMessages(): Message[];
|
|
82
|
+
/**
|
|
83
|
+
* Clear all messages
|
|
84
|
+
*/
|
|
85
|
+
clear(): void;
|
|
86
|
+
/**
|
|
87
|
+
* Get message count
|
|
88
|
+
*/
|
|
89
|
+
get length(): number;
|
|
90
|
+
/**
|
|
91
|
+
* Export history as SLIM string
|
|
92
|
+
*/
|
|
93
|
+
toSlim(): string;
|
|
94
|
+
/**
|
|
95
|
+
* Export history as JSON string (for comparison)
|
|
96
|
+
*/
|
|
97
|
+
toJSON(): string;
|
|
98
|
+
/**
|
|
99
|
+
* Get compression stats
|
|
100
|
+
*/
|
|
101
|
+
getStats(): {
|
|
102
|
+
jsonSize: number;
|
|
103
|
+
slimSize: number;
|
|
104
|
+
savings: number;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Create from SLIM string
|
|
108
|
+
*/
|
|
109
|
+
static fromSlim(slim: string): SlimChatMessageHistory;
|
|
110
|
+
/**
|
|
111
|
+
* Create from JSON string
|
|
112
|
+
*/
|
|
113
|
+
static fromJSON(json: string): SlimChatMessageHistory;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Conversation buffer memory with SLIM compression
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const memory = new SlimConversationMemory();
|
|
121
|
+
*
|
|
122
|
+
* memory.saveContext(
|
|
123
|
+
* { input: "What's the weather?" },
|
|
124
|
+
* { output: "It's sunny and 72°F" }
|
|
125
|
+
* );
|
|
126
|
+
*
|
|
127
|
+
* const variables = memory.loadMemoryVariables();
|
|
128
|
+
* // { history: "Human: What's the weather?\nAI: It's sunny and 72°F" }
|
|
129
|
+
*
|
|
130
|
+
* // Export for storage
|
|
131
|
+
* const slim = memory.toSlim();
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
declare class SlimConversationMemory {
|
|
135
|
+
private history;
|
|
136
|
+
private humanPrefix;
|
|
137
|
+
private aiPrefix;
|
|
138
|
+
private memoryKey;
|
|
139
|
+
constructor(options?: SlimMemoryOptions & {
|
|
140
|
+
humanPrefix?: string;
|
|
141
|
+
aiPrefix?: string;
|
|
142
|
+
memoryKey?: string;
|
|
143
|
+
});
|
|
144
|
+
/**
|
|
145
|
+
* Save context from a conversation turn
|
|
146
|
+
*/
|
|
147
|
+
saveContext(inputs: {
|
|
148
|
+
input: string;
|
|
149
|
+
[key: string]: unknown;
|
|
150
|
+
}, outputs: {
|
|
151
|
+
output: string;
|
|
152
|
+
[key: string]: unknown;
|
|
153
|
+
}): void;
|
|
154
|
+
/**
|
|
155
|
+
* Load memory variables for prompt
|
|
156
|
+
*/
|
|
157
|
+
loadMemoryVariables(): Record<string, string>;
|
|
158
|
+
/**
|
|
159
|
+
* Clear memory
|
|
160
|
+
*/
|
|
161
|
+
clear(): void;
|
|
162
|
+
/**
|
|
163
|
+
* Get all messages
|
|
164
|
+
*/
|
|
165
|
+
getMessages(): Message[];
|
|
166
|
+
/**
|
|
167
|
+
* Export as SLIM
|
|
168
|
+
*/
|
|
169
|
+
toSlim(): string;
|
|
170
|
+
/**
|
|
171
|
+
* Get compression stats
|
|
172
|
+
*/
|
|
173
|
+
getStats(): {
|
|
174
|
+
jsonSize: number;
|
|
175
|
+
slimSize: number;
|
|
176
|
+
savings: number;
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Create from SLIM
|
|
180
|
+
*/
|
|
181
|
+
static fromSlim(slim: string, options?: {
|
|
182
|
+
humanPrefix?: string;
|
|
183
|
+
aiPrefix?: string;
|
|
184
|
+
memoryKey?: string;
|
|
185
|
+
}): SlimConversationMemory;
|
|
186
|
+
}
|
|
187
|
+
declare const _default: {
|
|
188
|
+
SlimChatMessageHistory: typeof SlimChatMessageHistory;
|
|
189
|
+
SlimConversationMemory: typeof SlimConversationMemory;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export { type Message as M, type SlimSerializeOptions as S, _default as _, type SerializedMemory as a, type SlimMemoryOptions as b, SlimChatMessageHistory as c, SlimConversationMemory as d };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { c as SlimChatMessageHistory, d as SlimConversationMemory, _ as default } from './memory-Btlz_Pf_.mjs';
|
package/dist/memory.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { c as SlimChatMessageHistory, d as SlimConversationMemory, _ as default } from './memory-Btlz_Pf_.js';
|
package/dist/memory.js
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/memory.ts
|
|
21
|
+
var memory_exports = {};
|
|
22
|
+
__export(memory_exports, {
|
|
23
|
+
SlimChatMessageHistory: () => SlimChatMessageHistory,
|
|
24
|
+
SlimConversationMemory: () => SlimConversationMemory,
|
|
25
|
+
default: () => memory_default
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(memory_exports);
|
|
28
|
+
var import_slim_protocol_core = require("slim-protocol-core");
|
|
29
|
+
var SlimChatMessageHistory = class _SlimChatMessageHistory {
|
|
30
|
+
constructor(options = {}) {
|
|
31
|
+
this.messages = [];
|
|
32
|
+
this.sessionId = options.sessionId || "default";
|
|
33
|
+
this.enabled = options.enabled !== false;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Add a human/user message
|
|
37
|
+
*/
|
|
38
|
+
addUserMessage(content) {
|
|
39
|
+
this.messages.push({ role: "human", content });
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Add an AI/assistant message
|
|
43
|
+
*/
|
|
44
|
+
addAIMessage(content) {
|
|
45
|
+
this.messages.push({ role: "ai", content });
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Add a system message
|
|
49
|
+
*/
|
|
50
|
+
addSystemMessage(content) {
|
|
51
|
+
this.messages.push({ role: "system", content });
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Add a function message
|
|
55
|
+
*/
|
|
56
|
+
addFunctionMessage(content, name) {
|
|
57
|
+
this.messages.push({ role: "function", content, name });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Add a generic message
|
|
61
|
+
*/
|
|
62
|
+
addMessage(message) {
|
|
63
|
+
this.messages.push(message);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get all messages
|
|
67
|
+
*/
|
|
68
|
+
getMessages() {
|
|
69
|
+
return [...this.messages];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Clear all messages
|
|
73
|
+
*/
|
|
74
|
+
clear() {
|
|
75
|
+
this.messages = [];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get message count
|
|
79
|
+
*/
|
|
80
|
+
get length() {
|
|
81
|
+
return this.messages.length;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Export history as SLIM string
|
|
85
|
+
*/
|
|
86
|
+
toSlim() {
|
|
87
|
+
return (0, import_slim_protocol_core.encode)({
|
|
88
|
+
sessionId: this.sessionId,
|
|
89
|
+
messages: this.messages
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Export history as JSON string (for comparison)
|
|
94
|
+
*/
|
|
95
|
+
toJSON() {
|
|
96
|
+
return JSON.stringify({
|
|
97
|
+
sessionId: this.sessionId,
|
|
98
|
+
messages: this.messages
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get compression stats
|
|
103
|
+
*/
|
|
104
|
+
getStats() {
|
|
105
|
+
const json = this.toJSON();
|
|
106
|
+
const slim = this.toSlim();
|
|
107
|
+
const jsonSize = json.length;
|
|
108
|
+
const slimSize = slim.length;
|
|
109
|
+
const savings = jsonSize > 0 ? Math.round((1 - slimSize / jsonSize) * 100) : 0;
|
|
110
|
+
return { jsonSize, slimSize, savings };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create from SLIM string
|
|
114
|
+
*/
|
|
115
|
+
static fromSlim(slim) {
|
|
116
|
+
const data = (0, import_slim_protocol_core.decode)(slim);
|
|
117
|
+
const history = new _SlimChatMessageHistory({ sessionId: data.sessionId });
|
|
118
|
+
history.messages = data.messages || [];
|
|
119
|
+
return history;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create from JSON string
|
|
123
|
+
*/
|
|
124
|
+
static fromJSON(json) {
|
|
125
|
+
const data = JSON.parse(json);
|
|
126
|
+
const history = new _SlimChatMessageHistory({ sessionId: data.sessionId });
|
|
127
|
+
history.messages = data.messages || [];
|
|
128
|
+
return history;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
var SlimConversationMemory = class _SlimConversationMemory {
|
|
132
|
+
constructor(options = {}) {
|
|
133
|
+
this.humanPrefix = "Human";
|
|
134
|
+
this.aiPrefix = "AI";
|
|
135
|
+
this.memoryKey = "history";
|
|
136
|
+
this.history = new SlimChatMessageHistory(options);
|
|
137
|
+
this.humanPrefix = options.humanPrefix || "Human";
|
|
138
|
+
this.aiPrefix = options.aiPrefix || "AI";
|
|
139
|
+
this.memoryKey = options.memoryKey || "history";
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Save context from a conversation turn
|
|
143
|
+
*/
|
|
144
|
+
saveContext(inputs, outputs) {
|
|
145
|
+
this.history.addUserMessage(inputs.input);
|
|
146
|
+
this.history.addAIMessage(outputs.output);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Load memory variables for prompt
|
|
150
|
+
*/
|
|
151
|
+
loadMemoryVariables() {
|
|
152
|
+
const messages = this.history.getMessages();
|
|
153
|
+
const buffer = messages.map((m) => {
|
|
154
|
+
if (m.role === "human") return `${this.humanPrefix}: ${m.content}`;
|
|
155
|
+
if (m.role === "ai") return `${this.aiPrefix}: ${m.content}`;
|
|
156
|
+
if (m.role === "system") return `System: ${m.content}`;
|
|
157
|
+
return m.content;
|
|
158
|
+
}).join("\n");
|
|
159
|
+
return { [this.memoryKey]: buffer };
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Clear memory
|
|
163
|
+
*/
|
|
164
|
+
clear() {
|
|
165
|
+
this.history.clear();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get all messages
|
|
169
|
+
*/
|
|
170
|
+
getMessages() {
|
|
171
|
+
return this.history.getMessages();
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Export as SLIM
|
|
175
|
+
*/
|
|
176
|
+
toSlim() {
|
|
177
|
+
return this.history.toSlim();
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get compression stats
|
|
181
|
+
*/
|
|
182
|
+
getStats() {
|
|
183
|
+
return this.history.getStats();
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Create from SLIM
|
|
187
|
+
*/
|
|
188
|
+
static fromSlim(slim, options) {
|
|
189
|
+
const memory = new _SlimConversationMemory(options);
|
|
190
|
+
const restored = SlimChatMessageHistory.fromSlim(slim);
|
|
191
|
+
for (const msg of restored.getMessages()) {
|
|
192
|
+
memory.history.addMessage(msg);
|
|
193
|
+
}
|
|
194
|
+
return memory;
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
var memory_default = { SlimChatMessageHistory, SlimConversationMemory };
|
|
198
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
199
|
+
0 && (module.exports = {
|
|
200
|
+
SlimChatMessageHistory,
|
|
201
|
+
SlimConversationMemory
|
|
202
|
+
});
|
|
203
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/memory.ts"],"sourcesContent":["/**\r\n * SLIM Memory implementations for LangChain\r\n */\r\n\r\nimport { encode, decode } from 'slim-protocol-core';\r\nimport { SlimMemoryOptions, Message, SerializedMemory } from './types';\r\n\r\n/**\r\n * Chat message history with SLIM compression\r\n *\r\n * @example\r\n * ```typescript\r\n * const history = new SlimChatMessageHistory();\r\n * history.addUserMessage(\"Hello\");\r\n * history.addAIMessage(\"Hi there!\");\r\n *\r\n * // Export as SLIM (40% smaller)\r\n * const slim = history.toSlim();\r\n *\r\n * // Import from SLIM\r\n * const restored = SlimChatMessageHistory.fromSlim(slim);\r\n * ```\r\n */\r\nexport class SlimChatMessageHistory {\r\n private messages: Message[] = [];\r\n private sessionId: string;\r\n private enabled: boolean;\r\n\r\n constructor(options: SlimMemoryOptions = {}) {\r\n this.sessionId = options.sessionId || 'default';\r\n this.enabled = options.enabled !== false;\r\n }\r\n\r\n /**\r\n * Add a human/user message\r\n */\r\n addUserMessage(content: string): void {\r\n this.messages.push({ role: 'human', content });\r\n }\r\n\r\n /**\r\n * Add an AI/assistant message\r\n */\r\n addAIMessage(content: string): void {\r\n this.messages.push({ role: 'ai', content });\r\n }\r\n\r\n /**\r\n * Add a system message\r\n */\r\n addSystemMessage(content: string): void {\r\n this.messages.push({ role: 'system', content });\r\n }\r\n\r\n /**\r\n * Add a function message\r\n */\r\n addFunctionMessage(content: string, name: string): void {\r\n this.messages.push({ role: 'function', content, name });\r\n }\r\n\r\n /**\r\n * Add a generic message\r\n */\r\n addMessage(message: Message): void {\r\n this.messages.push(message);\r\n }\r\n\r\n /**\r\n * Get all messages\r\n */\r\n getMessages(): Message[] {\r\n return [...this.messages];\r\n }\r\n\r\n /**\r\n * Clear all messages\r\n */\r\n clear(): void {\r\n this.messages = [];\r\n }\r\n\r\n /**\r\n * Get message count\r\n */\r\n get length(): number {\r\n return this.messages.length;\r\n }\r\n\r\n /**\r\n * Export history as SLIM string\r\n */\r\n toSlim(): string {\r\n return encode({\r\n sessionId: this.sessionId,\r\n messages: this.messages,\r\n });\r\n }\r\n\r\n /**\r\n * Export history as JSON string (for comparison)\r\n */\r\n toJSON(): string {\r\n return JSON.stringify({\r\n sessionId: this.sessionId,\r\n messages: this.messages,\r\n });\r\n }\r\n\r\n /**\r\n * Get compression stats\r\n */\r\n getStats(): { jsonSize: number; slimSize: number; savings: number } {\r\n const json = this.toJSON();\r\n const slim = this.toSlim();\r\n const jsonSize = json.length;\r\n const slimSize = slim.length;\r\n const savings = jsonSize > 0 ? Math.round((1 - slimSize / jsonSize) * 100) : 0;\r\n return { jsonSize, slimSize, savings };\r\n }\r\n\r\n /**\r\n * Create from SLIM string\r\n */\r\n static fromSlim(slim: string): SlimChatMessageHistory {\r\n const data = decode(slim) as unknown as { sessionId: string; messages: Message[] };\r\n const history = new SlimChatMessageHistory({ sessionId: data.sessionId });\r\n history.messages = data.messages || [];\r\n return history;\r\n }\r\n\r\n /**\r\n * Create from JSON string\r\n */\r\n static fromJSON(json: string): SlimChatMessageHistory {\r\n const data = JSON.parse(json) as { sessionId: string; messages: Message[] };\r\n const history = new SlimChatMessageHistory({ sessionId: data.sessionId });\r\n history.messages = data.messages || [];\r\n return history;\r\n }\r\n}\r\n\r\n/**\r\n * Conversation buffer memory with SLIM compression\r\n *\r\n * @example\r\n * ```typescript\r\n * const memory = new SlimConversationMemory();\r\n *\r\n * memory.saveContext(\r\n * { input: \"What's the weather?\" },\r\n * { output: \"It's sunny and 72°F\" }\r\n * );\r\n *\r\n * const variables = memory.loadMemoryVariables();\r\n * // { history: \"Human: What's the weather?\\nAI: It's sunny and 72°F\" }\r\n *\r\n * // Export for storage\r\n * const slim = memory.toSlim();\r\n * ```\r\n */\r\nexport class SlimConversationMemory {\r\n private history: SlimChatMessageHistory;\r\n private humanPrefix: string = 'Human';\r\n private aiPrefix: string = 'AI';\r\n private memoryKey: string = 'history';\r\n\r\n constructor(options: SlimMemoryOptions & {\r\n humanPrefix?: string;\r\n aiPrefix?: string;\r\n memoryKey?: string;\r\n } = {}) {\r\n this.history = new SlimChatMessageHistory(options);\r\n this.humanPrefix = options.humanPrefix || 'Human';\r\n this.aiPrefix = options.aiPrefix || 'AI';\r\n this.memoryKey = options.memoryKey || 'history';\r\n }\r\n\r\n /**\r\n * Save context from a conversation turn\r\n */\r\n saveContext(\r\n inputs: { input: string; [key: string]: unknown },\r\n outputs: { output: string; [key: string]: unknown }\r\n ): void {\r\n this.history.addUserMessage(inputs.input);\r\n this.history.addAIMessage(outputs.output);\r\n }\r\n\r\n /**\r\n * Load memory variables for prompt\r\n */\r\n loadMemoryVariables(): Record<string, string> {\r\n const messages = this.history.getMessages();\r\n const buffer = messages\r\n .map((m) => {\r\n if (m.role === 'human') return `${this.humanPrefix}: ${m.content}`;\r\n if (m.role === 'ai') return `${this.aiPrefix}: ${m.content}`;\r\n if (m.role === 'system') return `System: ${m.content}`;\r\n return m.content;\r\n })\r\n .join('\\n');\r\n\r\n return { [this.memoryKey]: buffer };\r\n }\r\n\r\n /**\r\n * Clear memory\r\n */\r\n clear(): void {\r\n this.history.clear();\r\n }\r\n\r\n /**\r\n * Get all messages\r\n */\r\n getMessages(): Message[] {\r\n return this.history.getMessages();\r\n }\r\n\r\n /**\r\n * Export as SLIM\r\n */\r\n toSlim(): string {\r\n return this.history.toSlim();\r\n }\r\n\r\n /**\r\n * Get compression stats\r\n */\r\n getStats(): { jsonSize: number; slimSize: number; savings: number } {\r\n return this.history.getStats();\r\n }\r\n\r\n /**\r\n * Create from SLIM\r\n */\r\n static fromSlim(slim: string, options?: { humanPrefix?: string; aiPrefix?: string; memoryKey?: string }): SlimConversationMemory {\r\n const memory = new SlimConversationMemory(options);\r\n const restored = SlimChatMessageHistory.fromSlim(slim);\r\n for (const msg of restored.getMessages()) {\r\n memory.history.addMessage(msg);\r\n }\r\n return memory;\r\n }\r\n}\r\n\r\nexport default { SlimChatMessageHistory, SlimConversationMemory };\r\n"],"mappings":"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","names":[]}
|
package/dist/memory.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@matteuccimarco/slim-langchain",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "LangChain integration with SLIM compression for reduced token usage and storage",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./memory": {
|
|
15
|
+
"types": "./dist/memory.d.ts",
|
|
16
|
+
"import": "./dist/memory.mjs",
|
|
17
|
+
"require": "./dist/memory.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": ["dist"],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsup",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"prepublishOnly": "npm run build"
|
|
25
|
+
},
|
|
26
|
+
"keywords": ["langchain", "slim", "compression", "llm", "ai", "tokens", "memory", "chat", "rag"],
|
|
27
|
+
"author": "Marco Matteucci <info@matteuccimarco.com>",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/matteuccimarco/slim-langchain.git"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"slim-protocol-core": "^0.1.0"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"@langchain/core": ">=0.1.0"
|
|
38
|
+
},
|
|
39
|
+
"peerDependenciesMeta": {
|
|
40
|
+
"@langchain/core": { "optional": true }
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@langchain/core": "^0.3.0",
|
|
44
|
+
"@types/node": "^20.10.0",
|
|
45
|
+
"tsup": "^8.0.1",
|
|
46
|
+
"typescript": "^5.3.0",
|
|
47
|
+
"vitest": "^1.1.0"
|
|
48
|
+
}
|
|
49
|
+
}
|