@cloudbase/agent-adapter-langchain 0.0.2
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/CHANGELOG.md +43 -0
- package/dist/index.d.mts +219 -0
- package/dist/index.d.ts +219 -0
- package/dist/index.js +432 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +406 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +55 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
// src/store/tdai.ts
|
|
2
|
+
import { BaseStore } from "@langchain/core/stores";
|
|
3
|
+
var TDAIStore = class extends BaseStore {
|
|
4
|
+
constructor(fields) {
|
|
5
|
+
super();
|
|
6
|
+
this.lc_namespace = ["langchain", "storage", "tdai"];
|
|
7
|
+
this.yieldKeysScanBatchSize = 1e3;
|
|
8
|
+
this.client = fields.client;
|
|
9
|
+
this.namespace = fields.namespace;
|
|
10
|
+
this.yieldKeysScanBatchSize = fields.yieldKeysScanBatchSize ?? this.yieldKeysScanBatchSize;
|
|
11
|
+
this.defaultSessionId = fields.defaultSessionId ?? "langchain_store_session";
|
|
12
|
+
this.defaultStrategy = fields.defaultStrategy ?? "kv_cache";
|
|
13
|
+
this.ttlSeconds = fields.ttlSeconds;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get prefixed key with namespace
|
|
17
|
+
*/
|
|
18
|
+
_getPrefixedKey(key) {
|
|
19
|
+
if (this.namespace) {
|
|
20
|
+
const delimiter = "/";
|
|
21
|
+
return `${this.namespace}${delimiter}${key}`;
|
|
22
|
+
}
|
|
23
|
+
return key;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Remove prefix from key
|
|
27
|
+
*/
|
|
28
|
+
_getDeprefixedKey(key) {
|
|
29
|
+
if (this.namespace) {
|
|
30
|
+
const delimiter = "/";
|
|
31
|
+
return key.slice(this.namespace.length + delimiter.length);
|
|
32
|
+
}
|
|
33
|
+
return key;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get or create session for the store
|
|
37
|
+
*/
|
|
38
|
+
async _getSession() {
|
|
39
|
+
if (this.sessionCache) {
|
|
40
|
+
return this.sessionCache;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const sessions = await this.client.querySessions({
|
|
44
|
+
limit: 1
|
|
45
|
+
});
|
|
46
|
+
if (sessions.sessions && sessions.sessions.length > 0) {
|
|
47
|
+
this.sessionCache = sessions.sessions[0].sessionId;
|
|
48
|
+
} else {
|
|
49
|
+
const result = await this.client.createSession({
|
|
50
|
+
name: `langchain_store_${this.namespace || "default"}`
|
|
51
|
+
});
|
|
52
|
+
this.sessionCache = result.sessionId;
|
|
53
|
+
}
|
|
54
|
+
return this.sessionCache;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
return this.defaultSessionId;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create record content for storage
|
|
61
|
+
*/
|
|
62
|
+
_createRecordContent(key, value) {
|
|
63
|
+
const decoder = new TextDecoder();
|
|
64
|
+
const content = {
|
|
65
|
+
key: this._getPrefixedKey(key),
|
|
66
|
+
value: decoder.decode(value),
|
|
67
|
+
timestamp: Date.now(),
|
|
68
|
+
ttl: this.ttlSeconds
|
|
69
|
+
};
|
|
70
|
+
return JSON.stringify(content);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Parse record content from storage
|
|
74
|
+
*/
|
|
75
|
+
_parseRecordContent(content) {
|
|
76
|
+
try {
|
|
77
|
+
const data = JSON.parse(content);
|
|
78
|
+
const encoder = new TextEncoder();
|
|
79
|
+
if (data.ttl && data.timestamp) {
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
if (now > data.timestamp + data.ttl * 1e3) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
key: data.key,
|
|
87
|
+
value: encoder.encode(data.value),
|
|
88
|
+
timestamp: data.timestamp,
|
|
89
|
+
ttl: data.ttl
|
|
90
|
+
};
|
|
91
|
+
} catch (error) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Gets multiple keys from the TDAI store.
|
|
97
|
+
* @param keys Array of keys to be retrieved.
|
|
98
|
+
* @returns An array of retrieved values.
|
|
99
|
+
*/
|
|
100
|
+
async mget(keys) {
|
|
101
|
+
if (keys.length === 0) {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const sessionId = await this._getSession();
|
|
106
|
+
const results = new Array(keys.length);
|
|
107
|
+
for (let i = 0; i < keys.length; i++) {
|
|
108
|
+
const prefixedKey = this._getPrefixedKey(keys[i]);
|
|
109
|
+
try {
|
|
110
|
+
const searchResult = await this.client.searchRecords({
|
|
111
|
+
content: prefixedKey,
|
|
112
|
+
sessionId,
|
|
113
|
+
strategies: [this.defaultStrategy],
|
|
114
|
+
limit: 1
|
|
115
|
+
});
|
|
116
|
+
if (searchResult.records && searchResult.records.length > 0) {
|
|
117
|
+
const record = searchResult.records[0];
|
|
118
|
+
const parsed = this._parseRecordContent(record.record_content);
|
|
119
|
+
if (parsed && parsed.key === prefixedKey) {
|
|
120
|
+
results[i] = parsed.value;
|
|
121
|
+
} else {
|
|
122
|
+
results[i] = void 0;
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
results[i] = void 0;
|
|
126
|
+
}
|
|
127
|
+
} catch (error) {
|
|
128
|
+
results[i] = void 0;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return results;
|
|
132
|
+
} catch (error) {
|
|
133
|
+
return new Array(keys.length).fill(void 0);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Sets multiple keys in the TDAI store.
|
|
138
|
+
* @param keyValuePairs Array of key-value pairs to be set.
|
|
139
|
+
* @returns Promise that resolves when all keys have been set.
|
|
140
|
+
*/
|
|
141
|
+
async mset(keyValuePairs) {
|
|
142
|
+
if (keyValuePairs.length === 0) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
const sessionId = await this._getSession();
|
|
147
|
+
for (const [key, value] of keyValuePairs) {
|
|
148
|
+
const content = this._createRecordContent(key, value);
|
|
149
|
+
try {
|
|
150
|
+
await this.client.appendRecord({
|
|
151
|
+
sessionId,
|
|
152
|
+
content,
|
|
153
|
+
strategy: this.defaultStrategy
|
|
154
|
+
});
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.warn(`Failed to set key ${key}:`, error);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
} catch (error) {
|
|
160
|
+
throw new Error(`Failed to set keys: ${error}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Deletes multiple keys from the TDAI store.
|
|
165
|
+
* @param keys Array of keys to be deleted.
|
|
166
|
+
* @returns Promise that resolves when all keys have been deleted.
|
|
167
|
+
*/
|
|
168
|
+
async mdelete(keys) {
|
|
169
|
+
if (keys.length === 0) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
const sessionId = await this._getSession();
|
|
174
|
+
for (const key of keys) {
|
|
175
|
+
const prefixedKey = this._getPrefixedKey(key);
|
|
176
|
+
try {
|
|
177
|
+
const searchResult = await this.client.searchRecords({
|
|
178
|
+
content: prefixedKey,
|
|
179
|
+
sessionId,
|
|
180
|
+
strategies: [this.defaultStrategy],
|
|
181
|
+
limit: 1
|
|
182
|
+
});
|
|
183
|
+
if (searchResult.records && searchResult.records.length > 0) {
|
|
184
|
+
const record = searchResult.records[0];
|
|
185
|
+
await this.client.deleteRecord({
|
|
186
|
+
sessionId,
|
|
187
|
+
recordId: record.record_id
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
} catch (error) {
|
|
191
|
+
console.warn(`Failed to delete key ${key}:`, error);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
} catch (error) {
|
|
195
|
+
throw new Error(`Failed to delete keys: ${error}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Yields keys from the TDAI store.
|
|
200
|
+
* @param prefix Optional prefix to filter the keys.
|
|
201
|
+
* @returns An AsyncGenerator that yields keys from the TDAI store.
|
|
202
|
+
*/
|
|
203
|
+
async *yieldKeys(prefix) {
|
|
204
|
+
try {
|
|
205
|
+
const sessionId = await this._getSession();
|
|
206
|
+
let offset = 0;
|
|
207
|
+
let hasMore = true;
|
|
208
|
+
while (hasMore) {
|
|
209
|
+
try {
|
|
210
|
+
const result = await this.client.queryRecords({
|
|
211
|
+
sessionId,
|
|
212
|
+
strategies: [this.defaultStrategy],
|
|
213
|
+
limit: this.yieldKeysScanBatchSize,
|
|
214
|
+
offset
|
|
215
|
+
});
|
|
216
|
+
if (!result.records || result.records.length === 0) {
|
|
217
|
+
hasMore = false;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
for (const record of result.records) {
|
|
221
|
+
const parsed = this._parseRecordContent(record.record_content);
|
|
222
|
+
if (parsed) {
|
|
223
|
+
const deprefixedKey = this._getDeprefixedKey(parsed.key);
|
|
224
|
+
if (!prefix || deprefixedKey.startsWith(prefix)) {
|
|
225
|
+
yield deprefixedKey;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
offset += result.records.length;
|
|
230
|
+
if (result.records.length < this.yieldKeysScanBatchSize) {
|
|
231
|
+
hasMore = false;
|
|
232
|
+
}
|
|
233
|
+
} catch (error) {
|
|
234
|
+
console.warn(`Error yielding keys at offset ${offset}:`, error);
|
|
235
|
+
hasMore = false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
} catch (error) {
|
|
239
|
+
console.warn("Error yielding keys:", error);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Close the TDAI client connection
|
|
244
|
+
*/
|
|
245
|
+
close() {
|
|
246
|
+
this.client.close();
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
// src/tool.ts
|
|
251
|
+
import { tool as langChainTool } from "@langchain/core/tools";
|
|
252
|
+
import {
|
|
253
|
+
tool as agKitTool,
|
|
254
|
+
ToolResult
|
|
255
|
+
} from "@cloudbase/agent-tools";
|
|
256
|
+
import { z } from "zod/v4";
|
|
257
|
+
function convert2LangChain(agkitTool, implFunc) {
|
|
258
|
+
const func = implFunc || (async (input) => {
|
|
259
|
+
const result = await agkitTool.invoke(input);
|
|
260
|
+
return result;
|
|
261
|
+
});
|
|
262
|
+
return langChainTool(func, {
|
|
263
|
+
name: agkitTool.name,
|
|
264
|
+
description: agkitTool.description || agkitTool.name,
|
|
265
|
+
schema: agkitTool.schema || z.object({})
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
function convertLangChain2AGKit(langchainTool) {
|
|
269
|
+
const func = async (input, context) => {
|
|
270
|
+
try {
|
|
271
|
+
const result = await langchainTool.invoke(input);
|
|
272
|
+
return new ToolResult({
|
|
273
|
+
success: true,
|
|
274
|
+
data: result
|
|
275
|
+
});
|
|
276
|
+
} catch (error) {
|
|
277
|
+
return new ToolResult({
|
|
278
|
+
success: false,
|
|
279
|
+
error: error instanceof Error ? error.message : String(error),
|
|
280
|
+
error_type: "execution"
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
return agKitTool(func, {
|
|
285
|
+
name: langchainTool.name,
|
|
286
|
+
description: langchainTool.description || langchainTool.name,
|
|
287
|
+
schema: langchainTool.schema || z.object({})
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// src/agent.ts
|
|
292
|
+
import { z as z2 } from "zod/v3";
|
|
293
|
+
import { LanggraphAgent } from "@cloudbase/agent-adapter-langgraph";
|
|
294
|
+
import { createMiddleware } from "langchain";
|
|
295
|
+
var LangchainAgent = class extends LanggraphAgent {
|
|
296
|
+
constructor(config) {
|
|
297
|
+
super({ ...config, compiledWorkflow: config.agent });
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
function agKitClientTools() {
|
|
301
|
+
return createMiddleware({
|
|
302
|
+
name: "AGKitClientTools",
|
|
303
|
+
stateSchema: z2.object({
|
|
304
|
+
agKit: z2.object({
|
|
305
|
+
actions: z2.array(
|
|
306
|
+
z2.object({
|
|
307
|
+
name: z2.string(),
|
|
308
|
+
description: z2.string(),
|
|
309
|
+
schema: z2.any()
|
|
310
|
+
})
|
|
311
|
+
)
|
|
312
|
+
})
|
|
313
|
+
}),
|
|
314
|
+
beforeModel: (state) => state,
|
|
315
|
+
wrapModelCall: (request, hanlder) => {
|
|
316
|
+
const clientTools = (request.state.agKit.actions || []).map((tool) => {
|
|
317
|
+
const { name, description, schema } = tool;
|
|
318
|
+
return {
|
|
319
|
+
name,
|
|
320
|
+
description,
|
|
321
|
+
schema
|
|
322
|
+
};
|
|
323
|
+
});
|
|
324
|
+
return hanlder({
|
|
325
|
+
...request,
|
|
326
|
+
tools: [...request.tools || [], ...clientTools]
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// src/chat_history.ts
|
|
333
|
+
import { BaseListChatMessageHistory } from "@langchain/core/chat_history";
|
|
334
|
+
import {
|
|
335
|
+
mapStoredMessagesToChatMessages,
|
|
336
|
+
mapChatMessagesToStoredMessages
|
|
337
|
+
} from "@langchain/core/messages";
|
|
338
|
+
import { MemoryClient } from "@cloudbase/agent-agents";
|
|
339
|
+
var TDAIChatHistory = class extends BaseListChatMessageHistory {
|
|
340
|
+
constructor(options) {
|
|
341
|
+
super();
|
|
342
|
+
this.lc_namespace = ["langchain", "stores", "message", "tdai"];
|
|
343
|
+
const { sessionId, ...clientOptions } = options;
|
|
344
|
+
this.client = new MemoryClient({
|
|
345
|
+
...clientOptions
|
|
346
|
+
});
|
|
347
|
+
this.sessionId = options.sessionId;
|
|
348
|
+
}
|
|
349
|
+
async getMessages() {
|
|
350
|
+
const { events = [] } = await this.client.queryEvents({
|
|
351
|
+
sessionId: this.sessionId
|
|
352
|
+
});
|
|
353
|
+
return mapStoredMessagesToChatMessages(
|
|
354
|
+
events.map((event) => {
|
|
355
|
+
return {
|
|
356
|
+
type: event.type,
|
|
357
|
+
data: event.data
|
|
358
|
+
};
|
|
359
|
+
})
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Method to add a new message to the Firestore collection. The message is
|
|
364
|
+
* passed as a BaseMessage object.
|
|
365
|
+
* @param message The message to be added as a BaseMessage object.
|
|
366
|
+
*/
|
|
367
|
+
async addMessage(message) {
|
|
368
|
+
const messages = mapChatMessagesToStoredMessages([message]);
|
|
369
|
+
await this.appendMessage(messages[0]);
|
|
370
|
+
}
|
|
371
|
+
async appendMessage(message) {
|
|
372
|
+
await this.client.appendEvent({
|
|
373
|
+
sessionId: this.sessionId,
|
|
374
|
+
messages: message
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Method to delete all messages from the Firestore collection associated
|
|
379
|
+
* with the current session.
|
|
380
|
+
*/
|
|
381
|
+
async clear() {
|
|
382
|
+
const eventIds = await this.client.queryEvents({
|
|
383
|
+
sessionId: this.sessionId
|
|
384
|
+
}).then(({ events = [] }) => events.map((event) => event.event_id));
|
|
385
|
+
await Promise.all(
|
|
386
|
+
eventIds.map((id) => {
|
|
387
|
+
return this.client.deleteEvent({
|
|
388
|
+
sessionId: this.sessionId,
|
|
389
|
+
eventId: id
|
|
390
|
+
});
|
|
391
|
+
})
|
|
392
|
+
);
|
|
393
|
+
await this.client.deleteSession({
|
|
394
|
+
sessionId: this.sessionId
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
};
|
|
398
|
+
export {
|
|
399
|
+
LangchainAgent,
|
|
400
|
+
TDAIChatHistory,
|
|
401
|
+
TDAIStore,
|
|
402
|
+
agKitClientTools,
|
|
403
|
+
convert2LangChain,
|
|
404
|
+
convertLangChain2AGKit
|
|
405
|
+
};
|
|
406
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/store/tdai.ts","../src/tool.ts","../src/agent.ts","../src/chat_history.ts"],"sourcesContent":["import { MemoryClient } from \"@cloudbase/agent-agents\";\nimport { BaseStore } from \"@langchain/core/stores\";\n\n/**\n * Configuration options for TDAIStore\n */\nexport interface TDAIStoreInput {\n /**\n * The TDAI Memory Client instance\n */\n client: MemoryClient;\n\n /**\n * The amount of keys to retrieve per batch when yielding keys.\n * @default 1000\n */\n yieldKeysScanBatchSize?: number;\n\n /**\n * The namespace to use for the keys in the database.\n */\n namespace?: string;\n\n /**\n * Default session ID for storing records\n */\n defaultSessionId?: string;\n\n /**\n * Default strategy for storing records\n */\n defaultStrategy?: string;\n\n /**\n * TTL for records in seconds\n */\n ttlSeconds?: number;\n}\n\n/**\n * TDAI implementation of the BaseStore for key-value caching.\n * Uses TDAI Memory Client for persistent storage.\n *\n * @example\n * ```typescript\n * const client = new MemoryClient({\n * endpoint: \"https://memory.tdai.tencentyun.com\",\n * apiKey: \"your-api-key\",\n * memoryId: \"your-memory-id\",\n * });\n *\n * const store = new TDAIStore({\n * client,\n * namespace: \"cache\",\n * });\n *\n * const encoder = new TextEncoder();\n * await store.mset([\n * [\"key1\", encoder.encode(\"value1\")],\n * [\"key2\", encoder.encode(\"value2\")],\n * ]);\n *\n * const values = await store.mget([\"key1\", \"key2\"]);\n * ```\n */\nexport class TDAIStore extends BaseStore<string, Uint8Array> {\n lc_namespace = [\"langchain\", \"storage\", \"tdai\"];\n\n protected client: MemoryClient;\n protected namespace?: string;\n protected yieldKeysScanBatchSize = 1000;\n protected defaultSessionId: string;\n protected defaultStrategy: string;\n protected ttlSeconds?: number;\n private sessionCache?: string;\n\n constructor(fields: TDAIStoreInput) {\n super();\n this.client = fields.client;\n this.namespace = fields.namespace;\n this.yieldKeysScanBatchSize =\n fields.yieldKeysScanBatchSize ?? this.yieldKeysScanBatchSize;\n this.defaultSessionId =\n fields.defaultSessionId ?? \"langchain_store_session\";\n this.defaultStrategy = fields.defaultStrategy ?? \"kv_cache\";\n this.ttlSeconds = fields.ttlSeconds;\n }\n\n /**\n * Get prefixed key with namespace\n */\n private _getPrefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return `${this.namespace}${delimiter}${key}`;\n }\n return key;\n }\n\n /**\n * Remove prefix from key\n */\n private _getDeprefixedKey(key: string): string {\n if (this.namespace) {\n const delimiter = \"/\";\n return key.slice(this.namespace.length + delimiter.length);\n }\n return key;\n }\n\n /**\n * Get or create session for the store\n */\n private async _getSession(): Promise<string> {\n if (this.sessionCache) {\n return this.sessionCache;\n }\n\n try {\n // Try to find existing session\n const sessions = await this.client.querySessions({\n limit: 1,\n });\n\n if (sessions.sessions && sessions.sessions.length > 0) {\n this.sessionCache = sessions.sessions[0].sessionId;\n } else {\n // Create new session\n const result = await this.client.createSession({\n name: `langchain_store_${this.namespace || \"default\"}`,\n });\n this.sessionCache = result.sessionId;\n }\n\n return this.sessionCache!;\n } catch (error) {\n // Fallback to default session\n return this.defaultSessionId;\n }\n }\n\n /**\n * Create record content for storage\n */\n private _createRecordContent(key: string, value: Uint8Array): string {\n const decoder = new TextDecoder();\n const content = {\n key: this._getPrefixedKey(key),\n value: decoder.decode(value),\n timestamp: Date.now(),\n ttl: this.ttlSeconds,\n };\n return JSON.stringify(content);\n }\n\n /**\n * Parse record content from storage\n */\n private _parseRecordContent(\n content: string\n ): {\n key: string;\n value: Uint8Array;\n timestamp: number;\n ttl?: number;\n } | null {\n try {\n const data = JSON.parse(content);\n const encoder = new TextEncoder();\n\n // Check TTL if present\n if (data.ttl && data.timestamp) {\n const now = Date.now();\n if (now > data.timestamp + data.ttl * 1000) {\n return null; // Expired\n }\n }\n\n return {\n key: data.key,\n value: encoder.encode(data.value),\n timestamp: data.timestamp,\n ttl: data.ttl,\n };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Gets multiple keys from the TDAI store.\n * @param keys Array of keys to be retrieved.\n * @returns An array of retrieved values.\n */\n async mget(keys: string[]): Promise<(Uint8Array | undefined)[]> {\n if (keys.length === 0) {\n return [];\n }\n\n try {\n const sessionId = await this._getSession();\n const results: (Uint8Array | undefined)[] = new Array(keys.length);\n\n // Search for each key individually due to TDAI API limitations\n for (let i = 0; i < keys.length; i++) {\n const prefixedKey = this._getPrefixedKey(keys[i]);\n\n try {\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n const parsed = this._parseRecordContent(record.record_content);\n\n if (parsed && parsed.key === prefixedKey) {\n results[i] = parsed.value;\n } else {\n results[i] = undefined;\n }\n } else {\n results[i] = undefined;\n }\n } catch (error) {\n results[i] = undefined;\n }\n }\n\n return results;\n } catch (error) {\n // Return array of undefined values on error\n return new Array(keys.length).fill(undefined);\n }\n }\n\n /**\n * Sets multiple keys in the TDAI store.\n * @param keyValuePairs Array of key-value pairs to be set.\n * @returns Promise that resolves when all keys have been set.\n */\n async mset(keyValuePairs: [string, Uint8Array][]): Promise<void> {\n if (keyValuePairs.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Set each key-value pair\n for (const [key, value] of keyValuePairs) {\n const content = this._createRecordContent(key, value);\n\n try {\n await this.client.appendRecord({\n sessionId,\n content,\n strategy: this.defaultStrategy,\n });\n } catch (error) {\n console.warn(`Failed to set key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to set keys: ${error}`);\n }\n }\n\n /**\n * Deletes multiple keys from the TDAI store.\n * @param keys Array of keys to be deleted.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n if (keys.length === 0) {\n return;\n }\n\n try {\n const sessionId = await this._getSession();\n\n // Delete each key individually\n for (const key of keys) {\n const prefixedKey = this._getPrefixedKey(key);\n\n try {\n // First find the record\n const searchResult = await this.client.searchRecords({\n content: prefixedKey,\n sessionId,\n strategies: [this.defaultStrategy],\n limit: 1,\n });\n\n if (searchResult.records && searchResult.records.length > 0) {\n const record = searchResult.records[0];\n await this.client.deleteRecord({\n sessionId,\n recordId: record.record_id,\n });\n }\n } catch (error) {\n console.warn(`Failed to delete key ${key}:`, error);\n }\n }\n } catch (error) {\n throw new Error(`Failed to delete keys: ${error}`);\n }\n }\n\n /**\n * Yields keys from the TDAI store.\n * @param prefix Optional prefix to filter the keys.\n * @returns An AsyncGenerator that yields keys from the TDAI store.\n */\n async *yieldKeys(prefix?: string): AsyncGenerator<string> {\n try {\n const sessionId = await this._getSession();\n let offset = 0;\n let hasMore = true;\n\n while (hasMore) {\n try {\n const result = await this.client.queryRecords({\n sessionId,\n strategies: [this.defaultStrategy],\n limit: this.yieldKeysScanBatchSize,\n offset,\n });\n\n if (!result.records || result.records.length === 0) {\n hasMore = false;\n break;\n }\n\n for (const record of result.records) {\n const parsed = this._parseRecordContent(record.record_content);\n if (parsed) {\n const deprefixedKey = this._getDeprefixedKey(parsed.key);\n\n if (!prefix || deprefixedKey.startsWith(prefix)) {\n yield deprefixedKey;\n }\n }\n }\n\n offset += result.records.length;\n\n // If we got fewer records than requested, we've reached the end\n if (result.records.length < this.yieldKeysScanBatchSize) {\n hasMore = false;\n }\n } catch (error) {\n console.warn(`Error yielding keys at offset ${offset}:`, error);\n hasMore = false;\n }\n }\n } catch (error) {\n console.warn(\"Error yielding keys:\", error);\n }\n }\n\n /**\n * Close the TDAI client connection\n */\n close(): void {\n this.client.close();\n }\n}\n\n","/**\n * AG-Kit BaseTool to LangChain Tool Converter and Vice Versa\n */\nimport { tool as langChainTool, StructuredTool } from \"@langchain/core/tools\";\nimport {\n BaseTool,\n tool as agKitTool,\n ToolResult,\n ToolExecutionContext,\n} from \"@cloudbase/agent-tools\";\nimport { z } from \"zod/v4\";\n\n/**\n * Convert AG-Kit BaseTool to LangChain DynamicStructuredTool\n *\n * @param agkitTool - AG-Kit BaseTool instance\n * @param implFunc - Optional custom implementation function\n * @returns LangChain DynamicStructuredTool instance\n */\nexport function convert2LangChain(\n agkitTool: BaseTool,\n implFunc?: (tool: BaseTool) => Function\n) {\n const func =\n implFunc ||\n (async (input: any) => {\n const result = await agkitTool.invoke(input);\n return result;\n });\n\n return langChainTool(func as any, {\n name: agkitTool.name,\n description: agkitTool.description || agkitTool.name,\n schema: (agkitTool as any).schema || z.object({}),\n });\n}\n\n/**\n * Convert LangChain Tool to AG-Kit DynamicTool\n *\n * @param langchainTool - LangChain tool instance (DynamicStructuredTool or StructuredTool)\n * @returns AG-Kit DynamicTool instance\n */\nexport function convertLangChain2AGKit(langchainTool: StructuredTool) {\n const func: any = async (\n input: Record<string, any>,\n context?: ToolExecutionContext\n ) => {\n try {\n // Call the LangChain tool\n const result = await langchainTool.invoke(input);\n\n // Return successful result\n return new ToolResult({\n success: true,\n data: result,\n });\n } catch (error) {\n // Handle errors and return ToolResult with error\n return new ToolResult({\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"execution\",\n });\n }\n };\n\n return agKitTool(func, {\n name: langchainTool.name,\n description: langchainTool.description || langchainTool.name,\n schema: (langchainTool as any).schema || (z.object({}) as z.ZodObject<any>),\n });\n}\n\n","import { z } from \"zod/v3\";\nimport { AgentConfig } from \"@cloudbase/agent-agents/abstract\";\nimport { LanggraphAgent } from \"@cloudbase/agent-adapter-langgraph\";\nimport { createAgent, createMiddleware, DynamicTool } from \"langchain\";\n\nexport class LangchainAgent extends LanggraphAgent {\n constructor(\n config: AgentConfig & {\n agent: ReturnType<typeof createAgent>;\n }\n ) {\n super({ ...config, compiledWorkflow: config.agent });\n }\n}\n\nexport function agKitClientTools() {\n return createMiddleware({\n name: \"AGKitClientTools\",\n stateSchema: z.object({\n agKit: z.object({\n actions: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n schema: z.any(),\n })\n ),\n }),\n }),\n beforeModel: (state) => state,\n wrapModelCall: (request, hanlder) => {\n const clientTools = (\n (request.state.agKit.actions || []) as DynamicTool[]\n ).map((tool) => {\n const { name, description, schema } = tool;\n return {\n name,\n description,\n schema,\n };\n });\n\n return hanlder({\n ...request,\n tools: [...(request.tools || []), ...clientTools],\n });\n },\n });\n}\n\n","import { BaseListChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n BaseMessage,\n mapStoredMessagesToChatMessages,\n mapChatMessagesToStoredMessages,\n StoredMessage,\n} from \"@langchain/core/messages\";\nimport { IMemoryClientOptions, MemoryClient } from \"@cloudbase/agent-agents\";\n\nexport class TDAIChatHistory extends BaseListChatMessageHistory {\n lc_namespace = [\"langchain\", \"stores\", \"message\", \"tdai\"];\n\n public client: MemoryClient;\n\n private sessionId: string;\n\n constructor(options: IMemoryClientOptions & { sessionId: string }) {\n super();\n const { sessionId, ...clientOptions } = options;\n this.client = new MemoryClient({\n ...clientOptions,\n });\n this.sessionId = options.sessionId;\n }\n\n async getMessages(): Promise<BaseMessage[]> {\n const { events = [] } = await this.client.queryEvents({\n sessionId: this.sessionId,\n });\n\n return mapStoredMessagesToChatMessages(\n events.map((event) => {\n return {\n type: event.type,\n data: event.data,\n };\n })\n );\n }\n\n /**\n * Method to add a new message to the Firestore collection. The message is\n * passed as a BaseMessage object.\n * @param message The message to be added as a BaseMessage object.\n */\n public async addMessage(message: BaseMessage) {\n const messages = mapChatMessagesToStoredMessages([message]);\n await this.appendMessage(messages[0]);\n }\n\n private async appendMessage(message: StoredMessage): Promise<void> {\n await this.client.appendEvent({\n sessionId: this.sessionId,\n messages: message,\n });\n }\n\n /**\n * Method to delete all messages from the Firestore collection associated\n * with the current session.\n */\n public async clear(): Promise<void> {\n const eventIds = await this.client\n .queryEvents({\n sessionId: this.sessionId,\n })\n .then(({ events = [] }) => events.map((event: any) => event.event_id));\n\n await Promise.all(\n eventIds.map((id: string) => {\n return this.client.deleteEvent({\n sessionId: this.sessionId,\n eventId: id,\n });\n })\n );\n\n await this.client.deleteSession({\n sessionId: this.sessionId,\n });\n }\n}\n\n"],"mappings":"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","names":["z"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cloudbase/agent-adapter-langchain",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "LangChain adapter for AG-Kit agents",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist/",
|
|
7
|
+
"README.md",
|
|
8
|
+
"CHANGELOG.md"
|
|
9
|
+
],
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"module": "dist/index.mjs",
|
|
12
|
+
"types": "dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": {
|
|
16
|
+
"types": "./dist/index.d.mts",
|
|
17
|
+
"default": "./dist/index.mjs"
|
|
18
|
+
},
|
|
19
|
+
"require": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"default": "./dist/index.js"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"ag-kit",
|
|
27
|
+
"langchain",
|
|
28
|
+
"adapter",
|
|
29
|
+
"agent"
|
|
30
|
+
],
|
|
31
|
+
"author": "",
|
|
32
|
+
"license": "ISC",
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^20.0.0",
|
|
35
|
+
"tsup": "^8.5.0",
|
|
36
|
+
"typescript": "^5.0.0"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@langchain/core": "^1.0.2",
|
|
40
|
+
"langchain": "^1.0.2",
|
|
41
|
+
"zod": "^3.25.0 || ^4.0.0",
|
|
42
|
+
"@cloudbase/agent-adapter-langgraph": "0.0.2",
|
|
43
|
+
"@cloudbase/agent-tools": "0.0.2",
|
|
44
|
+
"@cloudbase/agent-agents": "0.0.2"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"zod": "^3.25.0 || ^4.0.0",
|
|
48
|
+
"@cloudbase/agent-agents": "0.0.2",
|
|
49
|
+
"@cloudbase/agent-adapter-langgraph": "0.0.2"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
53
|
+
"build": "tsup --config tsup.config.ts"
|
|
54
|
+
}
|
|
55
|
+
}
|