@minded-ai/mindedjs 1.0.21 → 1.0.23
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.js +2 -2
- package/dist/agent.js.map +1 -1
- package/dist/checkpointer/checkpointSaverFactory.d.ts +3 -2
- package/dist/checkpointer/checkpointSaverFactory.js +6 -17
- package/dist/checkpointer/checkpointSaverFactory.js.map +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +65 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/platform/mindedCheckpointSaver.d.ts +3 -2
- package/dist/platform/mindedCheckpointSaver.js +36 -27
- package/dist/platform/mindedCheckpointSaver.js.map +1 -1
- package/dist/platform/mindedConnection.d.ts +1 -0
- package/dist/platform/mindedConnection.js +25 -1
- package/dist/platform/mindedConnection.js.map +1 -1
- package/dist/platform/mindedConnectionTypes.d.ts +37 -1
- package/dist/platform/mindedConnectionTypes.js +4 -0
- package/dist/platform/mindedConnectionTypes.js.map +1 -1
- package/examples/orderRefundAgent/flows/orderRefundFlow.yaml +1 -1
- package/examples/orderRefundAgent/minded.json +4 -8
- package/examples/orderRefundAgent/orderRefundAgent.ts +4 -4
- package/package.json +5 -1
- package/src/agent.ts +2 -2
- package/src/checkpointer/checkpointSaverFactory.ts +7 -20
- package/src/cli/index.ts +35 -0
- package/src/platform/mindedCheckpointSaver.ts +54 -40
- package/src/platform/mindedConnection.ts +29 -1
- package/src/platform/mindedConnectionTypes.ts +50 -0
- package/test/checkpoint-saver/minded-checkpoint-saver-list.test.ts +17 -15
- package/test/checkpoint-saver/minded-checkpoint-saver.test.ts +16 -15
package/dist/agent.js
CHANGED
|
@@ -62,9 +62,7 @@ class Agent {
|
|
|
62
62
|
this.tools = tools;
|
|
63
63
|
this.platformToken = platformToken;
|
|
64
64
|
this.llm = (0, createLlmInstance_1.createLlmInstance)(config.llm);
|
|
65
|
-
this.checkpointer = memorySaver || (0, checkpointSaverFactory_1.createCheckpointSaver)('');
|
|
66
65
|
this.validate();
|
|
67
|
-
this.compiledGraph = this.initializeGraph();
|
|
68
66
|
if (process.env.NODE_ENV !== 'test' && process.env.NO_PLATFORM_CONNECT !== 'true') {
|
|
69
67
|
this.mindedConnection = new mindedConnection_1.MindedConnection();
|
|
70
68
|
this.mindedConnection.start();
|
|
@@ -77,6 +75,8 @@ class Agent {
|
|
|
77
75
|
});
|
|
78
76
|
});
|
|
79
77
|
}
|
|
78
|
+
this.checkpointer = memorySaver || (0, checkpointSaverFactory_1.createCheckpointSaver)(this.mindedConnection);
|
|
79
|
+
this.compiledGraph = this.initializeGraph();
|
|
80
80
|
}
|
|
81
81
|
loadFlowsFromDirectory(flowsDirectories) {
|
|
82
82
|
const flows = [];
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAA2D;AAE3D,+BAAoC;AAEpC,oDAA2D;AAE3D,qDAAkD;AAClD,6DAA2F;AAC3F,qDAAkD;AAClD,sDAA0G;AAG1G,kEAA+D;AAC/D,4EAAsI;AACtI,uCAAyB;AACzB,2CAA6B;AAC7B,8CAAgC;AAEhC,+DAA4D;AAC5D,mCAAgC;AAChC,+BAA+B;AAC/B,kFAA8E;AAE9E,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAA,cAAO,EAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AAShD,MAAa,KAAK;IAmBhB,YAAY,MAA4D;QAbhE,qBAAgB,GAA4B,IAAI,CAAC;QAMzD,sFAAsF;QAC9E,kBAAa,GAIjB,EAAE,CAAC;QAGL,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAC3E,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,IAAA,qCAAiB,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { BaseCheckpointSaver } from '@langchain/langgraph';
|
|
2
|
+
import { MindedConnection } from '../platform/mindedConnection';
|
|
2
3
|
/**
|
|
3
|
-
* Factory function to create the appropriate checkpoint saver based on environment variables
|
|
4
|
+
* Factory function to create the appropriate checkpoint saver based on environment variables.
|
|
4
5
|
* @param platformToken - Optional platform token for remote checkpoint saving
|
|
5
6
|
* @returns BaseCheckpointSaver instance (either MemorySaver or MindedCheckpointSaver)
|
|
6
7
|
*/
|
|
7
|
-
export declare function createCheckpointSaver(
|
|
8
|
+
export declare function createCheckpointSaver(mindedConnection: MindedConnection | null): BaseCheckpointSaver;
|
|
@@ -4,27 +4,16 @@ exports.createCheckpointSaver = createCheckpointSaver;
|
|
|
4
4
|
const langgraph_1 = require("@langchain/langgraph");
|
|
5
5
|
const mindedCheckpointSaver_1 = require("../platform/mindedCheckpointSaver");
|
|
6
6
|
/**
|
|
7
|
-
* Factory function to create the appropriate checkpoint saver based on environment variables
|
|
7
|
+
* Factory function to create the appropriate checkpoint saver based on environment variables.
|
|
8
8
|
* @param platformToken - Optional platform token for remote checkpoint saving
|
|
9
9
|
* @returns BaseCheckpointSaver instance (either MemorySaver or MindedCheckpointSaver)
|
|
10
10
|
*/
|
|
11
|
-
function createCheckpointSaver(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
console.log('Using in-memory checkpoint saver');
|
|
11
|
+
function createCheckpointSaver(mindedConnection) {
|
|
12
|
+
if (!mindedConnection) {
|
|
13
|
+
console.warn('mindedConnection not set, falling back to in-memory checkpoint saver');
|
|
15
14
|
return new langgraph_1.MemorySaver();
|
|
16
15
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// console.warn('No platform token provided, falling back to in-memory checkpoint saver');
|
|
20
|
-
// return new MemorySaver();
|
|
21
|
-
// }
|
|
22
|
-
const mindedServer = process.env.MINDED_SERVER;
|
|
23
|
-
if (!mindedServer) {
|
|
24
|
-
console.warn('MINDED_SERVER environment variable not set, falling back to in-memory checkpoint saver');
|
|
25
|
-
return new langgraph_1.MemorySaver();
|
|
26
|
-
}
|
|
27
|
-
console.log(`Using remote checkpoint saver with server: ${mindedServer}`);
|
|
28
|
-
return new mindedCheckpointSaver_1.MindedCheckpointSaver(platformToken);
|
|
16
|
+
console.log(`Using remote checkpoint saver}`);
|
|
17
|
+
return new mindedCheckpointSaver_1.MindedCheckpointSaver(mindedConnection);
|
|
29
18
|
}
|
|
30
19
|
//# sourceMappingURL=checkpointSaverFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpointSaverFactory.js","sourceRoot":"","sources":["../../src/checkpointer/checkpointSaverFactory.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"checkpointSaverFactory.js","sourceRoot":"","sources":["../../src/checkpointer/checkpointSaverFactory.ts"],"names":[],"mappings":";;AASA,sDAQC;AAjBD,oDAAwE;AACxE,6EAA0E;AAG1E;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,gBAAyC;IAC7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACrF,OAAO,IAAI,uBAAW,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,IAAI,6CAAqB,CAAC,gBAAgB,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const TOKEN_FILE = '.minded-token';
|
|
40
|
+
function getTokenFilePath() {
|
|
41
|
+
return path.join(process.cwd(), TOKEN_FILE);
|
|
42
|
+
}
|
|
43
|
+
function setToken(token) {
|
|
44
|
+
const tokenPath = getTokenFilePath();
|
|
45
|
+
fs.writeFileSync(tokenPath, token);
|
|
46
|
+
console.log(`Token saved to ${tokenPath}`);
|
|
47
|
+
}
|
|
48
|
+
function main() {
|
|
49
|
+
const args = process.argv.slice(2);
|
|
50
|
+
const command = args[0];
|
|
51
|
+
if (command === 'token') {
|
|
52
|
+
const token = args[1];
|
|
53
|
+
if (!token) {
|
|
54
|
+
console.error('Please provide a token');
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
setToken(token);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.error('Unknown command. Available commands: token');
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
main();
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uCAAyB;AACzB,2CAA6B;AAE7B,MAAM,UAAU,GAAG,eAAe,CAAC;AAEnC,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,IAAI;IACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { BaseCheckpointSaver, CheckpointTuple, Checkpoint, CheckpointMetadata, ChannelVersions, PendingWrite, CheckpointListOptions } from '@langchain/langgraph-checkpoint';
|
|
2
2
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
3
|
+
import { MindedConnection } from './mindedConnection';
|
|
3
4
|
export declare class MindedCheckpointSaver extends BaseCheckpointSaver<number> {
|
|
4
|
-
private
|
|
5
|
-
constructor(
|
|
5
|
+
private mindedConnection;
|
|
6
|
+
constructor(mindedConnection: MindedConnection);
|
|
6
7
|
getTuple(config: RunnableConfig<Record<string, any>>): Promise<CheckpointTuple | undefined>;
|
|
7
8
|
list(config: RunnableConfig<Record<string, any>>, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple, any, any>;
|
|
8
9
|
put(config: RunnableConfig<Record<string, any>>, checkpoint: Checkpoint<string, string>, metadata: CheckpointMetadata, newVersions: ChannelVersions): Promise<RunnableConfig<Record<string, any>>>;
|
|
@@ -2,18 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MindedCheckpointSaver = void 0;
|
|
4
4
|
const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
|
|
5
|
-
const
|
|
5
|
+
const mindedConnectionTypes_1 = require("./mindedConnectionTypes");
|
|
6
6
|
class MindedCheckpointSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
7
|
-
constructor(
|
|
7
|
+
constructor(mindedConnection) {
|
|
8
8
|
super();
|
|
9
|
-
this.
|
|
9
|
+
this.mindedConnection = mindedConnection;
|
|
10
10
|
}
|
|
11
11
|
async getTuple(config) {
|
|
12
|
-
const response = await (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
body: { config },
|
|
16
|
-
token: this.token,
|
|
12
|
+
const response = await this.mindedConnection.awaitEmit(mindedConnectionTypes_1.MindedConnectionSocketMessageType.CHECKPOINT_GET_TUPLE, {
|
|
13
|
+
type: mindedConnectionTypes_1.MindedConnectionSocketMessageType.CHECKPOINT_GET_TUPLE,
|
|
14
|
+
config,
|
|
17
15
|
});
|
|
18
16
|
if (!response.tuple) {
|
|
19
17
|
return undefined;
|
|
@@ -47,13 +45,12 @@ class MindedCheckpointSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
47
45
|
};
|
|
48
46
|
}
|
|
49
47
|
async *list(config, options) {
|
|
50
|
-
const response = await (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
token: this.token,
|
|
48
|
+
const response = await this.mindedConnection.awaitEmit(mindedConnectionTypes_1.MindedConnectionSocketMessageType.CHECKPOINT_LIST, {
|
|
49
|
+
type: mindedConnectionTypes_1.MindedConnectionSocketMessageType.CHECKPOINT_LIST,
|
|
50
|
+
config,
|
|
51
|
+
options,
|
|
55
52
|
});
|
|
56
|
-
for (const tuple of response.checkpoints) {
|
|
53
|
+
for (const tuple of response.checkpoints || []) {
|
|
57
54
|
// Re-serialize and deserialize checkpoint to restore class information
|
|
58
55
|
const [checkpointType, serializedCheckpoint] = this.serde.dumpsTyped(tuple.checkpoint);
|
|
59
56
|
const checkpoint = (await this.serde.loadsTyped(checkpointType, serializedCheckpoint));
|
|
@@ -73,21 +70,33 @@ class MindedCheckpointSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
|
|
|
73
70
|
}
|
|
74
71
|
}
|
|
75
72
|
async put(config, checkpoint, metadata, newVersions) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
try {
|
|
74
|
+
const response = await this.mindedConnection.awaitEmit(mindedConnectionTypes_1.MindedConnectionSocketMessageType.CHECKPOINT_PUT, {
|
|
75
|
+
type: mindedConnectionTypes_1.MindedConnectionSocketMessageType.CHECKPOINT_PUT,
|
|
76
|
+
config,
|
|
77
|
+
checkpoint,
|
|
78
|
+
metadata,
|
|
79
|
+
newVersions,
|
|
80
|
+
});
|
|
81
|
+
return response.config;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error('Error putting checkpoint:', error);
|
|
85
|
+
return config;
|
|
86
|
+
}
|
|
83
87
|
}
|
|
84
88
|
async putWrites(config, writes, taskId) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
try {
|
|
90
|
+
await this.mindedConnection.awaitEmit(mindedConnectionTypes_1.MindedConnectionSocketMessageType.CHECKPOINT_PUT_WRITES, {
|
|
91
|
+
type: mindedConnectionTypes_1.MindedConnectionSocketMessageType.CHECKPOINT_PUT_WRITES,
|
|
92
|
+
config,
|
|
93
|
+
writes,
|
|
94
|
+
taskId,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error('Error putting writes:', error);
|
|
99
|
+
}
|
|
91
100
|
}
|
|
92
101
|
}
|
|
93
102
|
exports.MindedCheckpointSaver = MindedCheckpointSaver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mindedCheckpointSaver.js","sourceRoot":"","sources":["../../src/platform/mindedCheckpointSaver.ts"],"names":[],"mappings":";;;AAAA,0EASyC;
|
|
1
|
+
{"version":3,"file":"mindedCheckpointSaver.js","sourceRoot":"","sources":["../../src/platform/mindedCheckpointSaver.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export declare class MindedConnection {
|
|
|
13
13
|
private getMindedToken;
|
|
14
14
|
on: (event: MindedConnectionSocketMessageType, callback: (message: BaseMindedConnectionSocketMessage) => void) => void;
|
|
15
15
|
emit: (event: MindedConnectionSocketMessageType, message: BaseMindedConnectionSocketMessage) => void;
|
|
16
|
+
awaitEmit: <T, R>(event: MindedConnectionSocketMessageType, message: T, timeoutMs?: number) => Promise<R>;
|
|
16
17
|
private connect;
|
|
17
18
|
start(): Promise<void>;
|
|
18
19
|
}
|
|
@@ -38,6 +38,7 @@ const socket_io_client_1 = require("socket.io-client");
|
|
|
38
38
|
const readline = __importStar(require("readline"));
|
|
39
39
|
const fs = __importStar(require("fs"));
|
|
40
40
|
const path = __importStar(require("path"));
|
|
41
|
+
const flatted_1 = require("flatted");
|
|
41
42
|
class MindedConnection {
|
|
42
43
|
constructor() {
|
|
43
44
|
this.socket = null;
|
|
@@ -55,6 +56,29 @@ class MindedConnection {
|
|
|
55
56
|
this.socket.emit(event, message);
|
|
56
57
|
}
|
|
57
58
|
};
|
|
59
|
+
this.awaitEmit = (event, message, timeoutMs = 5000) => {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
if (!this.socket) {
|
|
62
|
+
reject(new Error('Socket is not connected'));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Set up timeout
|
|
66
|
+
const timeout = setTimeout(() => {
|
|
67
|
+
reject(new Error(`Acknowledgement timeout after ${timeoutMs}ms`));
|
|
68
|
+
}, timeoutMs);
|
|
69
|
+
// Emit with acknowledgement callback
|
|
70
|
+
this.socket.emit(event, (0, flatted_1.stringify)(message), (response) => {
|
|
71
|
+
clearTimeout(timeout);
|
|
72
|
+
// Check if the response indicates an error
|
|
73
|
+
if (response && response.error) {
|
|
74
|
+
reject(new Error(response.error));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
resolve(response);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
};
|
|
58
82
|
if (!process.env.MINDED_CONNECTION_TOKEN && !this.getSavedToken()) {
|
|
59
83
|
this.initializeReadline();
|
|
60
84
|
}
|
|
@@ -105,7 +129,7 @@ class MindedConnection {
|
|
|
105
129
|
});
|
|
106
130
|
}
|
|
107
131
|
async connect(token) {
|
|
108
|
-
this.socket = (0, socket_io_client_1.io)(
|
|
132
|
+
this.socket = (0, socket_io_client_1.io)(process.env.MINDED_SERVER, {
|
|
109
133
|
path: '/minded-connect',
|
|
110
134
|
query: {
|
|
111
135
|
token,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mindedConnection.js","sourceRoot":"","sources":["../../src/platform/mindedConnection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA8C;AAC9C,mDAAqC;AAErC,uCAAyB;AACzB,2CAA6B;
|
|
1
|
+
{"version":3,"file":"mindedConnection.js","sourceRoot":"","sources":["../../src/platform/mindedConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,48 @@
|
|
|
1
|
+
import type { CheckpointListOptions, CheckpointMetadata, PendingWrite, Checkpoint, ChannelVersions, CheckpointTuple } from '@langchain/langgraph-checkpoint';
|
|
2
|
+
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
1
3
|
export declare enum MindedConnectionSocketMessageType {
|
|
2
|
-
OnAppTrigger = "on-app-trigger"
|
|
4
|
+
OnAppTrigger = "on-app-trigger",
|
|
5
|
+
CHECKPOINT_GET_TUPLE = "checkpoint-get-tuple",
|
|
6
|
+
CHECKPOINT_PUT = "checkpoint-put",
|
|
7
|
+
CHECKPOINT_LIST = "checkpoint-list",
|
|
8
|
+
CHECKPOINT_PUT_WRITES = "checkpoint-put-writes"
|
|
3
9
|
}
|
|
4
10
|
export interface BaseMindedConnectionSocketMessage {
|
|
5
11
|
type: MindedConnectionSocketMessageType;
|
|
6
12
|
}
|
|
13
|
+
export interface BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
7
16
|
export interface OnAppTrigger extends BaseMindedConnectionSocketMessage {
|
|
8
17
|
name: string;
|
|
9
18
|
agentId: string;
|
|
10
19
|
body: Record<string, any>;
|
|
11
20
|
cnvId: string;
|
|
12
21
|
}
|
|
22
|
+
export interface OnCheckpointPut extends BaseMindedConnectionSocketMessage {
|
|
23
|
+
config: RunnableConfig;
|
|
24
|
+
checkpoint: Checkpoint;
|
|
25
|
+
metadata: CheckpointMetadata;
|
|
26
|
+
newVersions: ChannelVersions;
|
|
27
|
+
}
|
|
28
|
+
export interface OnCheckpointPutResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
29
|
+
config: RunnableConfig;
|
|
30
|
+
}
|
|
31
|
+
export interface OnCheckpointPutWrites extends BaseMindedConnectionSocketMessage {
|
|
32
|
+
config: RunnableConfig;
|
|
33
|
+
writes: PendingWrite[];
|
|
34
|
+
taskId: string;
|
|
35
|
+
}
|
|
36
|
+
export interface OnCheckpointGetTupleResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
37
|
+
tuple?: CheckpointTuple | undefined;
|
|
38
|
+
}
|
|
39
|
+
export interface OnCheckpointGetTuple extends BaseMindedConnectionSocketMessage {
|
|
40
|
+
config: RunnableConfig;
|
|
41
|
+
}
|
|
42
|
+
export interface OnCheckpointList extends BaseMindedConnectionSocketMessage {
|
|
43
|
+
config: RunnableConfig;
|
|
44
|
+
options?: CheckpointListOptions;
|
|
45
|
+
}
|
|
46
|
+
export interface OnCheckpointListResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
47
|
+
checkpoints?: CheckpointTuple[];
|
|
48
|
+
}
|
|
@@ -4,5 +4,9 @@ exports.MindedConnectionSocketMessageType = void 0;
|
|
|
4
4
|
var MindedConnectionSocketMessageType;
|
|
5
5
|
(function (MindedConnectionSocketMessageType) {
|
|
6
6
|
MindedConnectionSocketMessageType["OnAppTrigger"] = "on-app-trigger";
|
|
7
|
+
MindedConnectionSocketMessageType["CHECKPOINT_GET_TUPLE"] = "checkpoint-get-tuple";
|
|
8
|
+
MindedConnectionSocketMessageType["CHECKPOINT_PUT"] = "checkpoint-put";
|
|
9
|
+
MindedConnectionSocketMessageType["CHECKPOINT_LIST"] = "checkpoint-list";
|
|
10
|
+
MindedConnectionSocketMessageType["CHECKPOINT_PUT_WRITES"] = "checkpoint-put-writes";
|
|
7
11
|
})(MindedConnectionSocketMessageType || (exports.MindedConnectionSocketMessageType = MindedConnectionSocketMessageType = {}));
|
|
8
12
|
//# sourceMappingURL=mindedConnectionTypes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mindedConnectionTypes.js","sourceRoot":"","sources":["../../src/platform/mindedConnectionTypes.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"mindedConnectionTypes.js","sourceRoot":"","sources":["../../src/platform/mindedConnectionTypes.ts"],"names":[],"mappings":";;;AAUA,IAAY,iCAMX;AAND,WAAY,iCAAiC;IAC3C,oEAA+B,CAAA;IAC/B,kFAA6C,CAAA;IAC7C,sEAAiC,CAAA;IACjC,wEAAmC,CAAA;IACnC,oFAA+C,CAAA;AACjD,CAAC,EANW,iCAAiC,iDAAjC,iCAAiC,QAM5C"}
|
|
@@ -15,7 +15,7 @@ nodes:
|
|
|
15
15
|
canStayOnNode: true
|
|
16
16
|
prompt: "You are a customer support agent (Alex) tasked with identifying the issue and escalating it if necessary. Introduce yourself and make sure to collect the customer's name, the issue they are having, and the order id they are referring to. make sure you got all the details you need before continue with the flow. You don't need to further help the customer."
|
|
17
17
|
llmConfig:
|
|
18
|
-
name: '
|
|
18
|
+
name: 'AzureChatOpenAI'
|
|
19
19
|
properties:
|
|
20
20
|
model: 'gpt-4o'
|
|
21
21
|
edges:
|
|
@@ -5,12 +5,12 @@ import tools from './tools';
|
|
|
5
5
|
import { HumanMessage } from '@langchain/core/messages';
|
|
6
6
|
import { events } from '../../src/index';
|
|
7
7
|
import mindedConfig from './minded.json';
|
|
8
|
-
|
|
8
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
9
|
+
const sessionId = `123_${uuidv4()}`;
|
|
9
10
|
const agent = new Agent({
|
|
10
11
|
memorySchema,
|
|
11
12
|
config: mindedConfig,
|
|
12
13
|
tools,
|
|
13
|
-
platformToken: '123',
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
agent.on(events.AI_MESSAGE, async ({ message }) => {
|
|
@@ -54,9 +54,9 @@ if (process.env.NO_PLATFORM_CONNECT === 'true') {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
await agent.invoke({
|
|
57
|
-
triggerBody: userInput,
|
|
57
|
+
triggerBody: { event: { text: userInput } },
|
|
58
58
|
triggerName: 'New Direct Message (Instant)',
|
|
59
|
-
sessionId:
|
|
59
|
+
sessionId: sessionId,
|
|
60
60
|
});
|
|
61
61
|
|
|
62
62
|
rl.prompt();
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minded-ai/mindedjs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.23",
|
|
4
4
|
"description": "MindedJS is a TypeScript library for building agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"minded": "./dist/cli/index.js"
|
|
9
|
+
},
|
|
7
10
|
"scripts": {
|
|
8
11
|
"build": "tsc",
|
|
9
12
|
"watch": "tsc -w",
|
|
@@ -39,6 +42,7 @@
|
|
|
39
42
|
"@langchain/langgraph": "^0.2.72",
|
|
40
43
|
"@types/js-yaml": "^4.0.9",
|
|
41
44
|
"axios": "^1.9.0",
|
|
45
|
+
"flatted": "^3.3.3",
|
|
42
46
|
"js-yaml": "^4.1.0",
|
|
43
47
|
"langchain": "^0.3.25",
|
|
44
48
|
"socket.io-client": "^4.8.1",
|
package/src/agent.ts
CHANGED
|
@@ -56,9 +56,7 @@ export class Agent {
|
|
|
56
56
|
this.tools = tools;
|
|
57
57
|
this.platformToken = platformToken;
|
|
58
58
|
this.llm = createLlmInstance(config.llm);
|
|
59
|
-
this.checkpointer = memorySaver || createCheckpointSaver('');
|
|
60
59
|
this.validate();
|
|
61
|
-
this.compiledGraph = this.initializeGraph();
|
|
62
60
|
|
|
63
61
|
if (process.env.NODE_ENV !== 'test' && process.env.NO_PLATFORM_CONNECT !== 'true') {
|
|
64
62
|
this.mindedConnection = new MindedConnection();
|
|
@@ -72,6 +70,8 @@ export class Agent {
|
|
|
72
70
|
});
|
|
73
71
|
});
|
|
74
72
|
}
|
|
73
|
+
this.checkpointer = memorySaver || createCheckpointSaver(this.mindedConnection);
|
|
74
|
+
this.compiledGraph = this.initializeGraph();
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
private loadFlowsFromDirectory(flowsDirectories: string[]): Flow[] {
|
|
@@ -1,31 +1,18 @@
|
|
|
1
1
|
import { BaseCheckpointSaver, MemorySaver } from '@langchain/langgraph';
|
|
2
2
|
import { MindedCheckpointSaver } from '../platform/mindedCheckpointSaver';
|
|
3
|
+
import { MindedConnection } from '../platform/mindedConnection';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
|
-
* Factory function to create the appropriate checkpoint saver based on environment variables
|
|
6
|
+
* Factory function to create the appropriate checkpoint saver based on environment variables.
|
|
6
7
|
* @param platformToken - Optional platform token for remote checkpoint saving
|
|
7
8
|
* @returns BaseCheckpointSaver instance (either MemorySaver or MindedCheckpointSaver)
|
|
8
9
|
*/
|
|
9
|
-
export function createCheckpointSaver(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (!useRemoteCheckpointSaver || process.env.NODE_ENV === 'test') {
|
|
13
|
-
console.log('Using in-memory checkpoint saver');
|
|
14
|
-
return new MemorySaver();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// // If not using in-memory, check for platform token and MINDED_SERVER
|
|
18
|
-
// if (!platformToken) {
|
|
19
|
-
// console.warn('No platform token provided, falling back to in-memory checkpoint saver');
|
|
20
|
-
// return new MemorySaver();
|
|
21
|
-
// }
|
|
22
|
-
|
|
23
|
-
const mindedServer = process.env.MINDED_SERVER;
|
|
24
|
-
if (!mindedServer) {
|
|
25
|
-
console.warn('MINDED_SERVER environment variable not set, falling back to in-memory checkpoint saver');
|
|
10
|
+
export function createCheckpointSaver(mindedConnection: MindedConnection | null): BaseCheckpointSaver {
|
|
11
|
+
if (!mindedConnection) {
|
|
12
|
+
console.warn('mindedConnection not set, falling back to in-memory checkpoint saver');
|
|
26
13
|
return new MemorySaver();
|
|
27
14
|
}
|
|
28
15
|
|
|
29
|
-
console.log(`Using remote checkpoint saver
|
|
30
|
-
return new MindedCheckpointSaver(
|
|
16
|
+
console.log(`Using remote checkpoint saver}`);
|
|
17
|
+
return new MindedCheckpointSaver(mindedConnection);
|
|
31
18
|
}
|
package/src/cli/index.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
|
|
6
|
+
const TOKEN_FILE = '.minded-token';
|
|
7
|
+
|
|
8
|
+
function getTokenFilePath(): string {
|
|
9
|
+
return path.join(process.cwd(), TOKEN_FILE);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function setToken(token: string): void {
|
|
13
|
+
const tokenPath = getTokenFilePath();
|
|
14
|
+
fs.writeFileSync(tokenPath, token);
|
|
15
|
+
console.log(`Token saved to ${tokenPath}`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function main() {
|
|
19
|
+
const args = process.argv.slice(2);
|
|
20
|
+
const command = args[0];
|
|
21
|
+
|
|
22
|
+
if (command === 'token') {
|
|
23
|
+
const token = args[1];
|
|
24
|
+
if (!token) {
|
|
25
|
+
console.error('Please provide a token');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
setToken(token);
|
|
29
|
+
} else {
|
|
30
|
+
console.error('Unknown command. Available commands: token');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
main();
|
|
@@ -9,20 +9,31 @@ import {
|
|
|
9
9
|
CheckpointPendingWrite,
|
|
10
10
|
} from '@langchain/langgraph-checkpoint';
|
|
11
11
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
12
|
-
import {
|
|
12
|
+
import { MindedConnection } from './mindedConnection';
|
|
13
|
+
import {
|
|
14
|
+
MindedConnectionSocketMessageType,
|
|
15
|
+
OnCheckpointGetTuple,
|
|
16
|
+
OnCheckpointGetTupleResponse,
|
|
17
|
+
OnCheckpointList,
|
|
18
|
+
OnCheckpointListResponse,
|
|
19
|
+
OnCheckpointPut,
|
|
20
|
+
OnCheckpointPutResponse,
|
|
21
|
+
OnCheckpointPutWrites,
|
|
22
|
+
} from './mindedConnectionTypes';
|
|
13
23
|
|
|
14
24
|
export class MindedCheckpointSaver extends BaseCheckpointSaver<number> {
|
|
15
|
-
constructor(private
|
|
25
|
+
constructor(private mindedConnection: MindedConnection) {
|
|
16
26
|
super();
|
|
17
27
|
}
|
|
18
28
|
|
|
19
29
|
async getTuple(config: RunnableConfig<Record<string, any>>): Promise<CheckpointTuple | undefined> {
|
|
20
|
-
const response = await
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
const response = await this.mindedConnection.awaitEmit<OnCheckpointGetTuple, OnCheckpointGetTupleResponse>(
|
|
31
|
+
MindedConnectionSocketMessageType.CHECKPOINT_GET_TUPLE,
|
|
32
|
+
{
|
|
33
|
+
type: MindedConnectionSocketMessageType.CHECKPOINT_GET_TUPLE,
|
|
34
|
+
config,
|
|
35
|
+
},
|
|
36
|
+
);
|
|
26
37
|
|
|
27
38
|
if (!response.tuple) {
|
|
28
39
|
return undefined;
|
|
@@ -64,17 +75,16 @@ export class MindedCheckpointSaver extends BaseCheckpointSaver<number> {
|
|
|
64
75
|
}
|
|
65
76
|
|
|
66
77
|
async *list(config: RunnableConfig<Record<string, any>>, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple, any, any> {
|
|
67
|
-
const response = await
|
|
68
|
-
|
|
69
|
-
{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
});
|
|
78
|
+
const response = await this.mindedConnection.awaitEmit<OnCheckpointList, OnCheckpointListResponse>(
|
|
79
|
+
MindedConnectionSocketMessageType.CHECKPOINT_LIST,
|
|
80
|
+
{
|
|
81
|
+
type: MindedConnectionSocketMessageType.CHECKPOINT_LIST,
|
|
82
|
+
config,
|
|
83
|
+
options,
|
|
84
|
+
},
|
|
85
|
+
);
|
|
76
86
|
|
|
77
|
-
for (const tuple of response.checkpoints) {
|
|
87
|
+
for (const tuple of response.checkpoints || []) {
|
|
78
88
|
// Re-serialize and deserialize checkpoint to restore class information
|
|
79
89
|
const [checkpointType, serializedCheckpoint] = this.serde.dumpsTyped(tuple.checkpoint);
|
|
80
90
|
const checkpoint = (await this.serde.loadsTyped(checkpointType, serializedCheckpoint)) as Checkpoint;
|
|
@@ -102,30 +112,34 @@ export class MindedCheckpointSaver extends BaseCheckpointSaver<number> {
|
|
|
102
112
|
metadata: CheckpointMetadata,
|
|
103
113
|
newVersions: ChannelVersions,
|
|
104
114
|
): Promise<RunnableConfig<Record<string, any>>> {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
115
|
+
try {
|
|
116
|
+
const response = await this.mindedConnection.awaitEmit<OnCheckpointPut, OnCheckpointPutResponse>(
|
|
117
|
+
MindedConnectionSocketMessageType.CHECKPOINT_PUT,
|
|
118
|
+
{
|
|
119
|
+
type: MindedConnectionSocketMessageType.CHECKPOINT_PUT,
|
|
120
|
+
config,
|
|
121
|
+
checkpoint,
|
|
122
|
+
metadata,
|
|
123
|
+
newVersions,
|
|
124
|
+
},
|
|
125
|
+
);
|
|
126
|
+
return response.config;
|
|
127
|
+
} catch (error) {
|
|
128
|
+
console.error('Error putting checkpoint:', error);
|
|
129
|
+
return config;
|
|
130
|
+
}
|
|
121
131
|
}
|
|
122
132
|
|
|
123
133
|
async putWrites(config: RunnableConfig<Record<string, any>>, writes: PendingWrite[], taskId: string): Promise<void> {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
134
|
+
try {
|
|
135
|
+
await this.mindedConnection.awaitEmit<OnCheckpointPutWrites, any>(MindedConnectionSocketMessageType.CHECKPOINT_PUT_WRITES, {
|
|
136
|
+
type: MindedConnectionSocketMessageType.CHECKPOINT_PUT_WRITES,
|
|
137
|
+
config,
|
|
138
|
+
writes,
|
|
139
|
+
taskId,
|
|
140
|
+
});
|
|
141
|
+
} catch (error) {
|
|
142
|
+
console.error('Error putting writes:', error);
|
|
143
|
+
}
|
|
130
144
|
}
|
|
131
145
|
}
|
|
@@ -3,6 +3,7 @@ import * as readline from 'readline';
|
|
|
3
3
|
import { BaseMindedConnectionSocketMessage, MindedConnectionSocketMessageType } from './mindedConnectionTypes';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import * as path from 'path';
|
|
6
|
+
import { stringify } from 'flatted';
|
|
6
7
|
|
|
7
8
|
export class MindedConnection {
|
|
8
9
|
private socket: Socket | null = null;
|
|
@@ -81,8 +82,35 @@ export class MindedConnection {
|
|
|
81
82
|
}
|
|
82
83
|
};
|
|
83
84
|
|
|
85
|
+
public awaitEmit = <T, R>(event: MindedConnectionSocketMessageType, message: T, timeoutMs: number = 5000): Promise<R> => {
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
if (!this.socket) {
|
|
88
|
+
reject(new Error('Socket is not connected'));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Set up timeout
|
|
93
|
+
const timeout = setTimeout(() => {
|
|
94
|
+
reject(new Error(`Acknowledgement timeout after ${timeoutMs}ms`));
|
|
95
|
+
}, timeoutMs);
|
|
96
|
+
|
|
97
|
+
// Emit with acknowledgement callback
|
|
98
|
+
|
|
99
|
+
this.socket.emit(event, stringify(message), (response: any) => {
|
|
100
|
+
clearTimeout(timeout);
|
|
101
|
+
|
|
102
|
+
// Check if the response indicates an error
|
|
103
|
+
if (response && response.error) {
|
|
104
|
+
reject(new Error(response.error));
|
|
105
|
+
} else {
|
|
106
|
+
resolve(response);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
|
|
84
112
|
private async connect(token: string) {
|
|
85
|
-
this.socket = io(
|
|
113
|
+
this.socket = io(process.env.MINDED_SERVER, {
|
|
86
114
|
path: '/minded-connect',
|
|
87
115
|
query: {
|
|
88
116
|
token,
|
|
@@ -1,14 +1,64 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
CheckpointListOptions,
|
|
3
|
+
CheckpointMetadata,
|
|
4
|
+
PendingWrite,
|
|
5
|
+
Checkpoint,
|
|
6
|
+
ChannelVersions,
|
|
7
|
+
CheckpointTuple,
|
|
8
|
+
} from '@langchain/langgraph-checkpoint';
|
|
9
|
+
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
10
|
+
|
|
1
11
|
export enum MindedConnectionSocketMessageType {
|
|
2
12
|
OnAppTrigger = 'on-app-trigger',
|
|
13
|
+
CHECKPOINT_GET_TUPLE = 'checkpoint-get-tuple',
|
|
14
|
+
CHECKPOINT_PUT = 'checkpoint-put',
|
|
15
|
+
CHECKPOINT_LIST = 'checkpoint-list',
|
|
16
|
+
CHECKPOINT_PUT_WRITES = 'checkpoint-put-writes',
|
|
3
17
|
}
|
|
4
18
|
|
|
5
19
|
export interface BaseMindedConnectionSocketMessage {
|
|
6
20
|
type: MindedConnectionSocketMessageType;
|
|
7
21
|
}
|
|
8
22
|
|
|
23
|
+
export interface BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
24
|
+
error?: string;
|
|
25
|
+
}
|
|
9
26
|
export interface OnAppTrigger extends BaseMindedConnectionSocketMessage {
|
|
10
27
|
name: string;
|
|
11
28
|
agentId: string;
|
|
12
29
|
body: Record<string, any>;
|
|
13
30
|
cnvId: string;
|
|
14
31
|
}
|
|
32
|
+
|
|
33
|
+
export interface OnCheckpointPut extends BaseMindedConnectionSocketMessage {
|
|
34
|
+
config: RunnableConfig;
|
|
35
|
+
checkpoint: Checkpoint;
|
|
36
|
+
metadata: CheckpointMetadata;
|
|
37
|
+
newVersions: ChannelVersions;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface OnCheckpointPutResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
41
|
+
config: RunnableConfig;
|
|
42
|
+
}
|
|
43
|
+
export interface OnCheckpointPutWrites extends BaseMindedConnectionSocketMessage {
|
|
44
|
+
config: RunnableConfig;
|
|
45
|
+
writes: PendingWrite[];
|
|
46
|
+
taskId: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface OnCheckpointGetTupleResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
50
|
+
tuple?: CheckpointTuple | undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface OnCheckpointGetTuple extends BaseMindedConnectionSocketMessage {
|
|
54
|
+
config: RunnableConfig;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface OnCheckpointList extends BaseMindedConnectionSocketMessage {
|
|
58
|
+
config: RunnableConfig;
|
|
59
|
+
options?: CheckpointListOptions;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface OnCheckpointListResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
63
|
+
checkpoints?: CheckpointTuple[];
|
|
64
|
+
}
|
|
@@ -2,19 +2,21 @@ import { expect } from 'chai';
|
|
|
2
2
|
import { describe, it, beforeEach, afterEach } from 'mocha';
|
|
3
3
|
import * as sinon from 'sinon';
|
|
4
4
|
import { MindedCheckpointSaver } from '../../src/platform/mindedCheckpointSaver';
|
|
5
|
-
import * as mindedRequestModule from '../../src/platform/mindedRequest';
|
|
6
5
|
import { Checkpoint, CheckpointTuple, CheckpointMetadata, emptyCheckpoint, CheckpointListOptions } from '@langchain/langgraph-checkpoint';
|
|
7
6
|
import { RunnableConfig } from '@langchain/core/runnables';
|
|
8
7
|
import { HumanMessage, AIMessage, SystemMessage } from '@langchain/core/messages';
|
|
8
|
+
import { MindedConnection } from '../../src/platform/mindedConnection';
|
|
9
|
+
import { MindedConnectionSocketMessageType } from '../../src/platform/mindedConnectionTypes';
|
|
9
10
|
|
|
10
11
|
describe('MindedCheckpointSaver - List Method', function () {
|
|
11
12
|
let checkpointSaver: MindedCheckpointSaver;
|
|
12
|
-
let
|
|
13
|
-
|
|
13
|
+
let mindedConnection: MindedConnection;
|
|
14
|
+
let awaitEmitStub: sinon.SinonStub;
|
|
14
15
|
|
|
15
16
|
beforeEach(() => {
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
mindedConnection = new MindedConnection();
|
|
18
|
+
checkpointSaver = new MindedCheckpointSaver(mindedConnection);
|
|
19
|
+
awaitEmitStub = sinon.stub(mindedConnection, 'awaitEmit');
|
|
18
20
|
});
|
|
19
21
|
|
|
20
22
|
afterEach(() => {
|
|
@@ -77,8 +79,8 @@ describe('MindedCheckpointSaver - List Method', function () {
|
|
|
77
79
|
],
|
|
78
80
|
};
|
|
79
81
|
|
|
80
|
-
// Mock the
|
|
81
|
-
|
|
82
|
+
// Mock the awaitEmit response
|
|
83
|
+
awaitEmitStub.resolves(mockServerResponse);
|
|
82
84
|
|
|
83
85
|
const config: RunnableConfig = { configurable: { thread_id: 'test-thread' } };
|
|
84
86
|
const options: CheckpointListOptions = { limit: 10 };
|
|
@@ -88,13 +90,13 @@ describe('MindedCheckpointSaver - List Method', function () {
|
|
|
88
90
|
results.push(tuple);
|
|
89
91
|
}
|
|
90
92
|
|
|
91
|
-
// Verify the
|
|
92
|
-
expect(
|
|
93
|
-
expect(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
// Verify the awaitEmit was called correctly
|
|
94
|
+
expect(awaitEmitStub.calledOnce).to.equal(true);
|
|
95
|
+
expect(awaitEmitStub.firstCall.args[0]).to.equal(MindedConnectionSocketMessageType.CHECKPOINT_LIST);
|
|
96
|
+
expect(awaitEmitStub.firstCall.args[1]).to.deep.equal({
|
|
97
|
+
type: MindedConnectionSocketMessageType.CHECKPOINT_LIST,
|
|
98
|
+
config,
|
|
99
|
+
options,
|
|
98
100
|
});
|
|
99
101
|
|
|
100
102
|
// Verify we got the correct number of results
|
|
@@ -123,7 +125,7 @@ describe('MindedCheckpointSaver - List Method', function () {
|
|
|
123
125
|
});
|
|
124
126
|
|
|
125
127
|
it('should handle empty checkpoint list', async () => {
|
|
126
|
-
|
|
128
|
+
awaitEmitStub.resolves({ checkpoints: [] });
|
|
127
129
|
|
|
128
130
|
const config: RunnableConfig = { configurable: { thread_id: 'empty-thread' } };
|
|
129
131
|
|
|
@@ -2,19 +2,21 @@ import { expect } from 'chai';
|
|
|
2
2
|
import { describe, it, beforeEach, afterEach } from 'mocha';
|
|
3
3
|
import * as sinon from 'sinon';
|
|
4
4
|
import { MindedCheckpointSaver } from '../../src/platform/mindedCheckpointSaver';
|
|
5
|
-
import * as mindedRequestModule from '../../src/platform/mindedRequest';
|
|
6
5
|
import { Checkpoint, CheckpointMetadata, emptyCheckpoint } from '@langchain/langgraph-checkpoint';
|
|
7
6
|
import { RunnableConfig } from '@langchain/core/runnables';
|
|
8
7
|
import { HumanMessage, AIMessage } from '@langchain/core/messages';
|
|
8
|
+
import { MindedConnection } from '../../src/platform/mindedConnection';
|
|
9
|
+
import { MindedConnectionSocketMessageType } from '../../src/platform/mindedConnectionTypes';
|
|
9
10
|
|
|
10
11
|
describe('MindedCheckpointSaver', function () {
|
|
11
12
|
let checkpointSaver: MindedCheckpointSaver;
|
|
12
|
-
let
|
|
13
|
-
|
|
13
|
+
let mindedConnection: MindedConnection;
|
|
14
|
+
let awaitEmitStub: sinon.SinonStub;
|
|
14
15
|
|
|
15
16
|
beforeEach(() => {
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
mindedConnection = new MindedConnection();
|
|
18
|
+
checkpointSaver = new MindedCheckpointSaver(mindedConnection);
|
|
19
|
+
awaitEmitStub = sinon.stub(mindedConnection, 'awaitEmit');
|
|
18
20
|
});
|
|
19
21
|
|
|
20
22
|
afterEach(() => {
|
|
@@ -58,19 +60,18 @@ describe('MindedCheckpointSaver', function () {
|
|
|
58
60
|
},
|
|
59
61
|
};
|
|
60
62
|
|
|
61
|
-
// Mock the
|
|
62
|
-
|
|
63
|
+
// Mock the awaitEmit response
|
|
64
|
+
awaitEmitStub.resolves(mockServerResponse);
|
|
63
65
|
|
|
64
66
|
const config: RunnableConfig = { configurable: { thread_id: 'test-thread' } };
|
|
65
67
|
const result = await checkpointSaver.getTuple(config);
|
|
66
68
|
|
|
67
|
-
// Verify the
|
|
68
|
-
expect(
|
|
69
|
-
expect(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
token: testToken,
|
|
69
|
+
// Verify the awaitEmit was called correctly
|
|
70
|
+
expect(awaitEmitStub.calledOnce).to.equal(true);
|
|
71
|
+
expect(awaitEmitStub.firstCall.args[0]).to.equal(MindedConnectionSocketMessageType.CHECKPOINT_GET_TUPLE);
|
|
72
|
+
expect(awaitEmitStub.firstCall.args[1]).to.deep.equal({
|
|
73
|
+
type: MindedConnectionSocketMessageType.CHECKPOINT_GET_TUPLE,
|
|
74
|
+
config,
|
|
74
75
|
});
|
|
75
76
|
|
|
76
77
|
// Verify the result structure
|
|
@@ -88,7 +89,7 @@ describe('MindedCheckpointSaver', function () {
|
|
|
88
89
|
});
|
|
89
90
|
|
|
90
91
|
it('should return undefined when server returns no tuple', async () => {
|
|
91
|
-
|
|
92
|
+
awaitEmitStub.resolves({ tuple: undefined });
|
|
92
93
|
|
|
93
94
|
const config: RunnableConfig = { configurable: { thread_id: 'test-thread' } };
|
|
94
95
|
const result = await checkpointSaver.getTuple(config);
|