@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
package/dist/index.js
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
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/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
SlimChatMessageHistory: () => SlimChatMessageHistory,
|
|
24
|
+
SlimConversationMemory: () => SlimConversationMemory,
|
|
25
|
+
deserializeMemory: () => deserializeMemory,
|
|
26
|
+
deserializeMessages: () => deserializeMessages,
|
|
27
|
+
estimateTokenSavings: () => estimateTokenSavings,
|
|
28
|
+
serializeMemory: () => serializeMemory,
|
|
29
|
+
serializeMessages: () => serializeMessages,
|
|
30
|
+
slimDeserialize: () => slimDeserialize,
|
|
31
|
+
slimSerialize: () => slimSerialize
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(src_exports);
|
|
34
|
+
|
|
35
|
+
// src/serialization.ts
|
|
36
|
+
var import_slim_protocol_core = require("slim-protocol-core");
|
|
37
|
+
function serializeMessages(messages, options = {}) {
|
|
38
|
+
return (0, import_slim_protocol_core.encode)(messages);
|
|
39
|
+
}
|
|
40
|
+
function deserializeMessages(slim) {
|
|
41
|
+
return (0, import_slim_protocol_core.decode)(slim);
|
|
42
|
+
}
|
|
43
|
+
function slimSerialize(data) {
|
|
44
|
+
return (0, import_slim_protocol_core.encode)(data);
|
|
45
|
+
}
|
|
46
|
+
function slimDeserialize(slim) {
|
|
47
|
+
return (0, import_slim_protocol_core.decode)(slim);
|
|
48
|
+
}
|
|
49
|
+
function serializeMemory(memory) {
|
|
50
|
+
return (0, import_slim_protocol_core.encode)(memory);
|
|
51
|
+
}
|
|
52
|
+
function deserializeMemory(slim) {
|
|
53
|
+
return (0, import_slim_protocol_core.decode)(slim);
|
|
54
|
+
}
|
|
55
|
+
function estimateTokenSavings(original, slim) {
|
|
56
|
+
const originalTokens = Math.ceil(original.length / 4);
|
|
57
|
+
const slimTokens = Math.ceil(slim.length / 4);
|
|
58
|
+
const savedTokens = originalTokens - slimTokens;
|
|
59
|
+
const savingsPercent = originalTokens > 0 ? savedTokens / originalTokens * 100 : 0;
|
|
60
|
+
return {
|
|
61
|
+
originalTokens,
|
|
62
|
+
slimTokens,
|
|
63
|
+
savedTokens,
|
|
64
|
+
savingsPercent: Math.round(savingsPercent * 10) / 10
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// src/memory.ts
|
|
69
|
+
var import_slim_protocol_core2 = require("slim-protocol-core");
|
|
70
|
+
var SlimChatMessageHistory = class _SlimChatMessageHistory {
|
|
71
|
+
constructor(options = {}) {
|
|
72
|
+
this.messages = [];
|
|
73
|
+
this.sessionId = options.sessionId || "default";
|
|
74
|
+
this.enabled = options.enabled !== false;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Add a human/user message
|
|
78
|
+
*/
|
|
79
|
+
addUserMessage(content) {
|
|
80
|
+
this.messages.push({ role: "human", content });
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Add an AI/assistant message
|
|
84
|
+
*/
|
|
85
|
+
addAIMessage(content) {
|
|
86
|
+
this.messages.push({ role: "ai", content });
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Add a system message
|
|
90
|
+
*/
|
|
91
|
+
addSystemMessage(content) {
|
|
92
|
+
this.messages.push({ role: "system", content });
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Add a function message
|
|
96
|
+
*/
|
|
97
|
+
addFunctionMessage(content, name) {
|
|
98
|
+
this.messages.push({ role: "function", content, name });
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Add a generic message
|
|
102
|
+
*/
|
|
103
|
+
addMessage(message) {
|
|
104
|
+
this.messages.push(message);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get all messages
|
|
108
|
+
*/
|
|
109
|
+
getMessages() {
|
|
110
|
+
return [...this.messages];
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Clear all messages
|
|
114
|
+
*/
|
|
115
|
+
clear() {
|
|
116
|
+
this.messages = [];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get message count
|
|
120
|
+
*/
|
|
121
|
+
get length() {
|
|
122
|
+
return this.messages.length;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Export history as SLIM string
|
|
126
|
+
*/
|
|
127
|
+
toSlim() {
|
|
128
|
+
return (0, import_slim_protocol_core2.encode)({
|
|
129
|
+
sessionId: this.sessionId,
|
|
130
|
+
messages: this.messages
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Export history as JSON string (for comparison)
|
|
135
|
+
*/
|
|
136
|
+
toJSON() {
|
|
137
|
+
return JSON.stringify({
|
|
138
|
+
sessionId: this.sessionId,
|
|
139
|
+
messages: this.messages
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get compression stats
|
|
144
|
+
*/
|
|
145
|
+
getStats() {
|
|
146
|
+
const json = this.toJSON();
|
|
147
|
+
const slim = this.toSlim();
|
|
148
|
+
const jsonSize = json.length;
|
|
149
|
+
const slimSize = slim.length;
|
|
150
|
+
const savings = jsonSize > 0 ? Math.round((1 - slimSize / jsonSize) * 100) : 0;
|
|
151
|
+
return { jsonSize, slimSize, savings };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Create from SLIM string
|
|
155
|
+
*/
|
|
156
|
+
static fromSlim(slim) {
|
|
157
|
+
const data = (0, import_slim_protocol_core2.decode)(slim);
|
|
158
|
+
const history = new _SlimChatMessageHistory({ sessionId: data.sessionId });
|
|
159
|
+
history.messages = data.messages || [];
|
|
160
|
+
return history;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create from JSON string
|
|
164
|
+
*/
|
|
165
|
+
static fromJSON(json) {
|
|
166
|
+
const data = JSON.parse(json);
|
|
167
|
+
const history = new _SlimChatMessageHistory({ sessionId: data.sessionId });
|
|
168
|
+
history.messages = data.messages || [];
|
|
169
|
+
return history;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
var SlimConversationMemory = class _SlimConversationMemory {
|
|
173
|
+
constructor(options = {}) {
|
|
174
|
+
this.humanPrefix = "Human";
|
|
175
|
+
this.aiPrefix = "AI";
|
|
176
|
+
this.memoryKey = "history";
|
|
177
|
+
this.history = new SlimChatMessageHistory(options);
|
|
178
|
+
this.humanPrefix = options.humanPrefix || "Human";
|
|
179
|
+
this.aiPrefix = options.aiPrefix || "AI";
|
|
180
|
+
this.memoryKey = options.memoryKey || "history";
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Save context from a conversation turn
|
|
184
|
+
*/
|
|
185
|
+
saveContext(inputs, outputs) {
|
|
186
|
+
this.history.addUserMessage(inputs.input);
|
|
187
|
+
this.history.addAIMessage(outputs.output);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Load memory variables for prompt
|
|
191
|
+
*/
|
|
192
|
+
loadMemoryVariables() {
|
|
193
|
+
const messages = this.history.getMessages();
|
|
194
|
+
const buffer = messages.map((m) => {
|
|
195
|
+
if (m.role === "human") return `${this.humanPrefix}: ${m.content}`;
|
|
196
|
+
if (m.role === "ai") return `${this.aiPrefix}: ${m.content}`;
|
|
197
|
+
if (m.role === "system") return `System: ${m.content}`;
|
|
198
|
+
return m.content;
|
|
199
|
+
}).join("\n");
|
|
200
|
+
return { [this.memoryKey]: buffer };
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Clear memory
|
|
204
|
+
*/
|
|
205
|
+
clear() {
|
|
206
|
+
this.history.clear();
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get all messages
|
|
210
|
+
*/
|
|
211
|
+
getMessages() {
|
|
212
|
+
return this.history.getMessages();
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Export as SLIM
|
|
216
|
+
*/
|
|
217
|
+
toSlim() {
|
|
218
|
+
return this.history.toSlim();
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get compression stats
|
|
222
|
+
*/
|
|
223
|
+
getStats() {
|
|
224
|
+
return this.history.getStats();
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Create from SLIM
|
|
228
|
+
*/
|
|
229
|
+
static fromSlim(slim, options) {
|
|
230
|
+
const memory = new _SlimConversationMemory(options);
|
|
231
|
+
const restored = SlimChatMessageHistory.fromSlim(slim);
|
|
232
|
+
for (const msg of restored.getMessages()) {
|
|
233
|
+
memory.history.addMessage(msg);
|
|
234
|
+
}
|
|
235
|
+
return memory;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
239
|
+
0 && (module.exports = {
|
|
240
|
+
SlimChatMessageHistory,
|
|
241
|
+
SlimConversationMemory,
|
|
242
|
+
deserializeMemory,
|
|
243
|
+
deserializeMessages,
|
|
244
|
+
estimateTokenSavings,
|
|
245
|
+
serializeMemory,
|
|
246
|
+
serializeMessages,
|
|
247
|
+
slimDeserialize,
|
|
248
|
+
slimSerialize
|
|
249
|
+
});
|
|
250
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/serialization.ts","../src/memory.ts"],"sourcesContent":["/**\r\n * SLIM LangChain - Token-efficient serialization for LangChain\r\n */\r\n\r\nexport * from './types';\r\nexport * from './serialization';\r\nexport * from './memory';\r\n","/**\r\n * SLIM serialization utilities for LangChain\r\n */\r\n\r\nimport { encode, decode } from 'slim-protocol-core';\r\nimport { SlimSerializeOptions, Message, SerializedMemory } from './types';\r\n\r\n/**\r\n * Serialize LangChain messages to SLIM format\r\n */\r\nexport function serializeMessages(messages: Message[], options: SlimSerializeOptions = {}): string {\r\n return encode(messages);\r\n}\r\n\r\n/**\r\n * Deserialize SLIM string back to messages\r\n */\r\nexport function deserializeMessages(slim: string): Message[] {\r\n return decode(slim) as unknown as Message[];\r\n}\r\n\r\n/**\r\n * Serialize any object to SLIM\r\n */\r\nexport function slimSerialize(data: unknown): string {\r\n return encode(data);\r\n}\r\n\r\n/**\r\n * Deserialize SLIM string to object\r\n */\r\nexport function slimDeserialize<T = unknown>(slim: string): T {\r\n return decode(slim) as unknown as T;\r\n}\r\n\r\n/**\r\n * Serialize memory state to SLIM\r\n */\r\nexport function serializeMemory(memory: SerializedMemory): string {\r\n return encode(memory);\r\n}\r\n\r\n/**\r\n * Deserialize SLIM to memory state\r\n */\r\nexport function deserializeMemory(slim: string): SerializedMemory {\r\n return decode(slim) as unknown as SerializedMemory;\r\n}\r\n\r\n/**\r\n * Calculate token savings estimate\r\n * Rough estimate: 1 token ≈ 4 characters\r\n */\r\nexport function estimateTokenSavings(original: string, slim: string): {\r\n originalTokens: number;\r\n slimTokens: number;\r\n savedTokens: number;\r\n savingsPercent: number;\r\n} {\r\n const originalTokens = Math.ceil(original.length / 4);\r\n const slimTokens = Math.ceil(slim.length / 4);\r\n const savedTokens = originalTokens - slimTokens;\r\n const savingsPercent = originalTokens > 0 ? (savedTokens / originalTokens) * 100 : 0;\r\n\r\n return {\r\n originalTokens,\r\n slimTokens,\r\n savedTokens,\r\n savingsPercent: Math.round(savingsPercent * 10) / 10,\r\n };\r\n}\r\n","/**\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":["import_slim_protocol_core"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SlimChatMessageHistory,
|
|
3
|
+
SlimConversationMemory
|
|
4
|
+
} from "./chunk-XICIEIQL.mjs";
|
|
5
|
+
|
|
6
|
+
// src/serialization.ts
|
|
7
|
+
import { encode, decode } from "slim-protocol-core";
|
|
8
|
+
function serializeMessages(messages, options = {}) {
|
|
9
|
+
return encode(messages);
|
|
10
|
+
}
|
|
11
|
+
function deserializeMessages(slim) {
|
|
12
|
+
return decode(slim);
|
|
13
|
+
}
|
|
14
|
+
function slimSerialize(data) {
|
|
15
|
+
return encode(data);
|
|
16
|
+
}
|
|
17
|
+
function slimDeserialize(slim) {
|
|
18
|
+
return decode(slim);
|
|
19
|
+
}
|
|
20
|
+
function serializeMemory(memory) {
|
|
21
|
+
return encode(memory);
|
|
22
|
+
}
|
|
23
|
+
function deserializeMemory(slim) {
|
|
24
|
+
return decode(slim);
|
|
25
|
+
}
|
|
26
|
+
function estimateTokenSavings(original, slim) {
|
|
27
|
+
const originalTokens = Math.ceil(original.length / 4);
|
|
28
|
+
const slimTokens = Math.ceil(slim.length / 4);
|
|
29
|
+
const savedTokens = originalTokens - slimTokens;
|
|
30
|
+
const savingsPercent = originalTokens > 0 ? savedTokens / originalTokens * 100 : 0;
|
|
31
|
+
return {
|
|
32
|
+
originalTokens,
|
|
33
|
+
slimTokens,
|
|
34
|
+
savedTokens,
|
|
35
|
+
savingsPercent: Math.round(savingsPercent * 10) / 10
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
SlimChatMessageHistory,
|
|
40
|
+
SlimConversationMemory,
|
|
41
|
+
deserializeMemory,
|
|
42
|
+
deserializeMessages,
|
|
43
|
+
estimateTokenSavings,
|
|
44
|
+
serializeMemory,
|
|
45
|
+
serializeMessages,
|
|
46
|
+
slimDeserialize,
|
|
47
|
+
slimSerialize
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/serialization.ts"],"sourcesContent":["/**\r\n * SLIM serialization utilities for LangChain\r\n */\r\n\r\nimport { encode, decode } from 'slim-protocol-core';\r\nimport { SlimSerializeOptions, Message, SerializedMemory } from './types';\r\n\r\n/**\r\n * Serialize LangChain messages to SLIM format\r\n */\r\nexport function serializeMessages(messages: Message[], options: SlimSerializeOptions = {}): string {\r\n return encode(messages);\r\n}\r\n\r\n/**\r\n * Deserialize SLIM string back to messages\r\n */\r\nexport function deserializeMessages(slim: string): Message[] {\r\n return decode(slim) as unknown as Message[];\r\n}\r\n\r\n/**\r\n * Serialize any object to SLIM\r\n */\r\nexport function slimSerialize(data: unknown): string {\r\n return encode(data);\r\n}\r\n\r\n/**\r\n * Deserialize SLIM string to object\r\n */\r\nexport function slimDeserialize<T = unknown>(slim: string): T {\r\n return decode(slim) as unknown as T;\r\n}\r\n\r\n/**\r\n * Serialize memory state to SLIM\r\n */\r\nexport function serializeMemory(memory: SerializedMemory): string {\r\n return encode(memory);\r\n}\r\n\r\n/**\r\n * Deserialize SLIM to memory state\r\n */\r\nexport function deserializeMemory(slim: string): SerializedMemory {\r\n return decode(slim) as unknown as SerializedMemory;\r\n}\r\n\r\n/**\r\n * Calculate token savings estimate\r\n * Rough estimate: 1 token ≈ 4 characters\r\n */\r\nexport function estimateTokenSavings(original: string, slim: string): {\r\n originalTokens: number;\r\n slimTokens: number;\r\n savedTokens: number;\r\n savingsPercent: number;\r\n} {\r\n const originalTokens = Math.ceil(original.length / 4);\r\n const slimTokens = Math.ceil(slim.length / 4);\r\n const savedTokens = originalTokens - slimTokens;\r\n const savingsPercent = originalTokens > 0 ? (savedTokens / originalTokens) * 100 : 0;\r\n\r\n return {\r\n originalTokens,\r\n slimTokens,\r\n savedTokens,\r\n savingsPercent: Math.round(savingsPercent * 10) / 10,\r\n };\r\n}\r\n"],"mappings":";;;;;;AAIA,SAAS,QAAQ,cAAc;AAMxB,SAAS,kBAAkB,UAAqB,UAAgC,CAAC,GAAW;AACjG,SAAO,OAAO,QAAQ;AACxB;AAKO,SAAS,oBAAoB,MAAyB;AAC3D,SAAO,OAAO,IAAI;AACpB;AAKO,SAAS,cAAc,MAAuB;AACnD,SAAO,OAAO,IAAI;AACpB;AAKO,SAAS,gBAA6B,MAAiB;AAC5D,SAAO,OAAO,IAAI;AACpB;AAKO,SAAS,gBAAgB,QAAkC;AAChE,SAAO,OAAO,MAAM;AACtB;AAKO,SAAS,kBAAkB,MAAgC;AAChE,SAAO,OAAO,IAAI;AACpB;AAMO,SAAS,qBAAqB,UAAkB,MAKrD;AACA,QAAM,iBAAiB,KAAK,KAAK,SAAS,SAAS,CAAC;AACpD,QAAM,aAAa,KAAK,KAAK,KAAK,SAAS,CAAC;AAC5C,QAAM,cAAc,iBAAiB;AACrC,QAAM,iBAAiB,iBAAiB,IAAK,cAAc,iBAAkB,MAAM;AAEnF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,KAAK,MAAM,iBAAiB,EAAE,IAAI;AAAA,EACpD;AACF;","names":[]}
|
|
@@ -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 };
|