graphai 0.1.0 → 0.1.1
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/README.md +7 -5
- package/lib/experimental_agents/array_agents/index.d.ts +3 -0
- package/lib/experimental_agents/array_agents/index.js +9 -0
- package/lib/experimental_agents/array_agents/pop_agent.d.ts +2 -0
- package/lib/experimental_agents/array_agents/pop_agent.js +15 -0
- package/lib/experimental_agents/array_agents/push_agent.d.ts +2 -0
- package/lib/experimental_agents/array_agents/push_agent.js +14 -0
- package/lib/experimental_agents/array_agents/shift_agent.d.ts +2 -0
- package/lib/experimental_agents/{array_agents.js → array_agents/shift_agent.js} +2 -17
- package/lib/experimental_agents/data_agents/data_object_merge_template_agent.d.ts +2 -0
- package/lib/experimental_agents/data_agents/data_object_merge_template_agent.js +13 -0
- package/lib/experimental_agents/data_agents/data_sum_template_agent.d.ts +17 -0
- package/lib/experimental_agents/data_agents/data_sum_template_agent.js +30 -0
- package/lib/experimental_agents/data_agents/index.d.ts +3 -0
- package/lib/experimental_agents/data_agents/index.js +9 -0
- package/lib/experimental_agents/data_agents/total_agent.d.ts +46 -0
- package/lib/experimental_agents/data_agents/total_agent.js +51 -0
- package/lib/experimental_agents/embedding_agent.d.ts +6 -0
- package/lib/experimental_agents/embedding_agent.js +43 -0
- package/lib/experimental_agents/index.d.ts +8 -3
- package/lib/experimental_agents/index.js +8 -3
- package/lib/experimental_agents/map_agent.d.ts +4 -0
- package/lib/experimental_agents/map_agent.js +46 -0
- package/lib/experimental_agents/matrix_agent.d.ts +9 -0
- package/lib/experimental_agents/matrix_agent.js +50 -0
- package/lib/experimental_agents/nested_agent.d.ts +2 -2
- package/lib/experimental_agents/nested_agent.js +14 -8
- package/lib/experimental_agents/slashgpt_agent.d.ts +1 -1
- package/lib/experimental_agents/slashgpt_agent.js +2 -7
- package/lib/experimental_agents/sleeper_agents/index.d.ts +2 -0
- package/lib/experimental_agents/sleeper_agents/index.js +7 -0
- package/lib/experimental_agents/sleeper_agents/sleeper_agent.d.ts +5 -0
- package/lib/experimental_agents/sleeper_agents/sleeper_agent.js +16 -0
- package/lib/experimental_agents/sleeper_agents/sleeper_agent_debug.d.ts +6 -0
- package/lib/experimental_agents/{sleeper_agent.js → sleeper_agents/sleeper_agent_debug.js} +4 -13
- package/lib/experimental_agents/string_agents/index.d.ts +2 -0
- package/lib/experimental_agents/string_agents/index.js +7 -0
- package/lib/experimental_agents/string_agents/string_splitter_agent.d.ts +7 -0
- package/lib/experimental_agents/string_agents/string_splitter_agent.js +24 -0
- package/lib/experimental_agents/string_agents/string_template_agent.d.ts +4 -0
- package/lib/experimental_agents/{string_agent.js → string_agents/string_template_agent.js} +2 -5
- package/lib/experimental_agents/test_agents/bypass_agent.d.ts +2 -0
- package/lib/experimental_agents/test_agents/bypass_agent.js +10 -0
- package/lib/experimental_agents/test_agents/copy_message_agent.d.ts +2 -0
- package/lib/experimental_agents/test_agents/copy_message_agent.js +11 -0
- package/lib/experimental_agents/test_agents/counting_agent.d.ts +2 -0
- package/lib/experimental_agents/test_agents/counting_agent.js +11 -0
- package/lib/experimental_agents/test_agents/echo_agent.d.ts +2 -0
- package/lib/experimental_agents/test_agents/echo_agent.js +7 -0
- package/lib/experimental_agents/test_agents/echo_fork_index_agent.d.ts +2 -0
- package/lib/experimental_agents/test_agents/echo_fork_index_agent.js +7 -0
- package/lib/experimental_agents/test_agents/index.d.ts +5 -0
- package/lib/experimental_agents/test_agents/index.js +13 -0
- package/lib/experimental_agents/test_agents/merge_node_id_agent.d.ts +2 -0
- package/lib/experimental_agents/test_agents/merge_node_id_agent.js +10 -0
- package/lib/experimental_agents/token_agent.d.ts +6 -0
- package/lib/experimental_agents/token_agent.js +33 -0
- package/lib/graphai.d.ts +23 -18
- package/lib/graphai.js +110 -115
- package/lib/index.d.ts +2 -0
- package/lib/log.d.ts +22 -6
- package/lib/log.js +45 -44
- package/lib/node.d.ts +31 -25
- package/lib/node.js +136 -97
- package/lib/task.d.ts +18 -0
- package/lib/task.js +63 -0
- package/lib/task_manager.d.ts +20 -0
- package/lib/task_manager.js +69 -0
- package/lib/transaction_log.d.ts +27 -0
- package/lib/transaction_log.js +56 -0
- package/lib/type.d.ts +45 -32
- package/lib/type.js +1 -0
- package/lib/utils/utils.d.ts +3 -1
- package/lib/utils/utils.js +17 -6
- package/lib/validator.d.ts +2 -0
- package/lib/validator.js +28 -0
- package/lib/validators/agent_validator.d.ts +1 -0
- package/lib/validators/agent_validator.js +12 -0
- package/lib/validators/common.d.ts +3 -0
- package/lib/validators/common.js +6 -0
- package/lib/validators/computed_node_validator.d.ts +2 -0
- package/lib/validators/computed_node_validator.js +13 -0
- package/lib/validators/graph_data_validator.d.ts +3 -0
- package/lib/validators/graph_data_validator.js +43 -0
- package/lib/validators/nodeValidator.d.ts +2 -0
- package/lib/validators/nodeValidator.js +13 -0
- package/lib/validators/relation_validator.d.ts +2 -0
- package/lib/validators/relation_validator.js +62 -0
- package/lib/validators/static_node_validator.d.ts +2 -0
- package/lib/validators/static_node_validator.js +13 -0
- package/package.json +3 -5
- package/lib/experimental_agents/array_agents.d.ts +0 -4
- package/lib/experimental_agents/data_agent.d.ts +0 -3
- package/lib/experimental_agents/data_agent.js +0 -25
- package/lib/experimental_agents/sleeper_agent.d.ts +0 -10
- package/lib/experimental_agents/string_agent.d.ts +0 -7
- package/lib/graphai_cli.d.ts +0 -2
- package/lib/graphai_cli.js +0 -37
- package/lib/utils.d.ts +0 -7
- package/lib/utils.js +0 -13
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sleeperAgent = void 0;
|
|
7
|
+
const utils_1 = require("../../utils/utils");
|
|
8
|
+
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
9
|
+
const sleeperAgent = async (context) => {
|
|
10
|
+
const { params, inputs } = context;
|
|
11
|
+
await (0, utils_1.sleep)(params?.duration ?? 10);
|
|
12
|
+
return inputs.reduce((result, input) => {
|
|
13
|
+
return (0, deepmerge_1.default)(result, input);
|
|
14
|
+
}, params.value ?? {});
|
|
15
|
+
};
|
|
16
|
+
exports.sleeperAgent = sleeperAgent;
|
|
@@ -3,22 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.sleeperAgentDebug =
|
|
7
|
-
const utils_1 = require("
|
|
6
|
+
exports.sleeperAgentDebug = void 0;
|
|
7
|
+
const utils_1 = require("../../utils/utils");
|
|
8
8
|
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
9
|
-
const
|
|
10
|
-
const { params, inputs } = context;
|
|
11
|
-
await (0, utils_1.sleep)(params.duration);
|
|
12
|
-
return inputs.reduce((result, input) => {
|
|
13
|
-
return (0, deepmerge_1.default)(result, input);
|
|
14
|
-
}, params.value ?? {});
|
|
15
|
-
};
|
|
16
|
-
exports.sleeperAgent = sleeperAgent;
|
|
17
|
-
const sleeperAgentDebug = async (context) => {
|
|
18
|
-
const { nodeId, params, inputs, retry } = context;
|
|
9
|
+
const sleeperAgentDebug = async ({ params, inputs, debugInfo: { retry }, }) => {
|
|
19
10
|
await (0, utils_1.sleep)(params.duration / (retry + 1));
|
|
20
11
|
if (params.fail && retry < 2) {
|
|
21
|
-
console.log("failed (intentional)", nodeId, retry);
|
|
12
|
+
// console.log("failed (intentional)", nodeId, retry);
|
|
22
13
|
throw new Error("Intentional Failure");
|
|
23
14
|
}
|
|
24
15
|
return inputs.reduce((result, input) => {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stringTemplateAgent = exports.stringSplitterAgent = void 0;
|
|
4
|
+
var string_splitter_agent_1 = require("../../experimental_agents/string_agents/string_splitter_agent");
|
|
5
|
+
Object.defineProperty(exports, "stringSplitterAgent", { enumerable: true, get: function () { return string_splitter_agent_1.stringSplitterAgent; } });
|
|
6
|
+
var string_template_agent_1 = require("../../experimental_agents/string_agents/string_template_agent");
|
|
7
|
+
Object.defineProperty(exports, "stringTemplateAgent", { enumerable: true, get: function () { return string_template_agent_1.stringTemplateAgent; } });
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stringSplitterAgent = void 0;
|
|
4
|
+
// This agent strip one long string into chunks using following parameters
|
|
5
|
+
//
|
|
6
|
+
// chunkSize: number; // default is 2048
|
|
7
|
+
// overlap: number; // default is 1/8th of chunkSize.
|
|
8
|
+
//
|
|
9
|
+
// see example
|
|
10
|
+
// tests/agents/test_string_agent.ts
|
|
11
|
+
//
|
|
12
|
+
const defaultChunkSize = 2048;
|
|
13
|
+
const stringSplitterAgent = async ({ params, inputs }) => {
|
|
14
|
+
const source = inputs[0];
|
|
15
|
+
const chunkSize = params.chunkSize ?? defaultChunkSize;
|
|
16
|
+
const overlap = params.overlap ?? Math.floor(chunkSize / 8);
|
|
17
|
+
const count = Math.floor(source.length / (chunkSize - overlap)) + 1;
|
|
18
|
+
const contents = new Array(count).fill(undefined).map((_, i) => {
|
|
19
|
+
const startIndex = i * (chunkSize - overlap);
|
|
20
|
+
return source.substring(startIndex, startIndex + chunkSize);
|
|
21
|
+
});
|
|
22
|
+
return { contents, count, chunkSize, overlap };
|
|
23
|
+
};
|
|
24
|
+
exports.stringSplitterAgent = stringSplitterAgent;
|
|
@@ -3,12 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.stringTemplateAgent = void 0;
|
|
4
4
|
// see example
|
|
5
5
|
// tests/agents/test_string_agent.ts
|
|
6
|
-
const stringTemplateAgent = async ({
|
|
7
|
-
if (verbose) {
|
|
8
|
-
console.log("executing", nodeId, params);
|
|
9
|
-
}
|
|
6
|
+
const stringTemplateAgent = async ({ params, inputs }) => {
|
|
10
7
|
const content = inputs.reduce((template, input, index) => {
|
|
11
|
-
return template.replace("${" + index + "}", input
|
|
8
|
+
return template.replace("${" + index + "}", input);
|
|
12
9
|
}, params.template);
|
|
13
10
|
return { content };
|
|
14
11
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bypassAgent = void 0;
|
|
4
|
+
const bypassAgent = async (context) => {
|
|
5
|
+
if (context.inputs.length === 1) {
|
|
6
|
+
return context.inputs[0];
|
|
7
|
+
}
|
|
8
|
+
return context.inputs;
|
|
9
|
+
};
|
|
10
|
+
exports.bypassAgent = bypassAgent;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyMessageAgent = void 0;
|
|
4
|
+
const copyMessageAgent = async ({ params }) => {
|
|
5
|
+
return {
|
|
6
|
+
messages: new Array(params.count).fill(undefined).map(() => {
|
|
7
|
+
return params.message;
|
|
8
|
+
}),
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
exports.copyMessageAgent = copyMessageAgent;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.countingAgent = void 0;
|
|
4
|
+
const countingAgent = async ({ params }) => {
|
|
5
|
+
return {
|
|
6
|
+
list: new Array(params.count).fill(undefined).map((_, i) => {
|
|
7
|
+
return i;
|
|
8
|
+
}),
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
exports.countingAgent = countingAgent;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.echoForkIndexAgent = void 0;
|
|
4
|
+
const echoForkIndexAgent = async ({ debugInfo: { forkIndex } }) => {
|
|
5
|
+
return { forkIndex };
|
|
6
|
+
};
|
|
7
|
+
exports.echoForkIndexAgent = echoForkIndexAgent;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { bypassAgent } from "../../experimental_agents/test_agents/bypass_agent";
|
|
2
|
+
export { echoAgent } from "../../experimental_agents/test_agents/echo_agent";
|
|
3
|
+
export { copyMessageAgent } from "../../experimental_agents/test_agents/copy_message_agent";
|
|
4
|
+
export { mergeNodeIdAgent } from "../../experimental_agents/test_agents/merge_node_id_agent";
|
|
5
|
+
export { countingAgent } from "../../experimental_agents/test_agents/counting_agent";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.countingAgent = exports.mergeNodeIdAgent = exports.copyMessageAgent = exports.echoAgent = exports.bypassAgent = void 0;
|
|
4
|
+
var bypass_agent_1 = require("../../experimental_agents/test_agents/bypass_agent");
|
|
5
|
+
Object.defineProperty(exports, "bypassAgent", { enumerable: true, get: function () { return bypass_agent_1.bypassAgent; } });
|
|
6
|
+
var echo_agent_1 = require("../../experimental_agents/test_agents/echo_agent");
|
|
7
|
+
Object.defineProperty(exports, "echoAgent", { enumerable: true, get: function () { return echo_agent_1.echoAgent; } });
|
|
8
|
+
var copy_message_agent_1 = require("../../experimental_agents/test_agents/copy_message_agent");
|
|
9
|
+
Object.defineProperty(exports, "copyMessageAgent", { enumerable: true, get: function () { return copy_message_agent_1.copyMessageAgent; } });
|
|
10
|
+
var merge_node_id_agent_1 = require("../../experimental_agents/test_agents/merge_node_id_agent");
|
|
11
|
+
Object.defineProperty(exports, "mergeNodeIdAgent", { enumerable: true, get: function () { return merge_node_id_agent_1.mergeNodeIdAgent; } });
|
|
12
|
+
var counting_agent_1 = require("../../experimental_agents/test_agents/counting_agent");
|
|
13
|
+
Object.defineProperty(exports, "countingAgent", { enumerable: true, get: function () { return counting_agent_1.countingAgent; } });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeNodeIdAgent = void 0;
|
|
4
|
+
const mergeNodeIdAgent = async ({ debugInfo: { nodeId }, inputs }) => {
|
|
5
|
+
// console.log("executing", nodeId);
|
|
6
|
+
return inputs.reduce((tmp, input) => {
|
|
7
|
+
return { ...tmp, ...input };
|
|
8
|
+
}, { [nodeId]: "hello" });
|
|
9
|
+
};
|
|
10
|
+
exports.mergeNodeIdAgent = mergeNodeIdAgent;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tokenBoundStringsAgent = void 0;
|
|
4
|
+
const tiktoken_1 = require("tiktoken");
|
|
5
|
+
const defaultMaxToken = 5000;
|
|
6
|
+
const encoder = (0, tiktoken_1.get_encoding)("cl100k_base");
|
|
7
|
+
// This agent generate a reference string from a sorted array of strings,
|
|
8
|
+
// adding one by one until the token count exceeds the specified limit.
|
|
9
|
+
// Parameters:
|
|
10
|
+
// limit?: number; // specifies the maximum token count. The default is 5000.
|
|
11
|
+
// Inputs:
|
|
12
|
+
// inputs[0]: Array<string>; // array of string sorted by relevance.
|
|
13
|
+
// Returns:
|
|
14
|
+
// { content: string } // reference text
|
|
15
|
+
const tokenBoundStringsAgent = async ({ params, inputs }) => {
|
|
16
|
+
const contents = inputs[0];
|
|
17
|
+
const limit = params?.limit ?? defaultMaxToken;
|
|
18
|
+
const addNext = (total, index) => {
|
|
19
|
+
const length = encoder.encode(contents[index] + "\n").length;
|
|
20
|
+
if (total + length < limit && index + 1 < contents.length) {
|
|
21
|
+
return addNext(total + length, index + 1);
|
|
22
|
+
}
|
|
23
|
+
return { endIndex: index + 1, tokenCount: total };
|
|
24
|
+
};
|
|
25
|
+
const { endIndex, tokenCount } = addNext(0, 0);
|
|
26
|
+
const content = contents
|
|
27
|
+
.filter((value, index) => {
|
|
28
|
+
return index < endIndex;
|
|
29
|
+
})
|
|
30
|
+
.join("\n");
|
|
31
|
+
return { content, tokenCount, endIndex };
|
|
32
|
+
};
|
|
33
|
+
exports.tokenBoundStringsAgent = tokenBoundStringsAgent;
|
package/lib/graphai.d.ts
CHANGED
|
@@ -1,36 +1,41 @@
|
|
|
1
1
|
export { AgentFunction, AgentFunctionDictonary, GraphData } from "./type";
|
|
2
|
-
import { AgentFunctionDictonary, GraphData, DataSource,
|
|
2
|
+
import { AgentFunctionDictonary, GraphData, DataSource, ResultDataDictonary, ResultData, DefaultResultData } from "./type";
|
|
3
|
+
import { TransactionLog } from "./transaction_log";
|
|
3
4
|
import { ComputedNode, StaticNode } from "./node";
|
|
5
|
+
import { TaskManager } from "./task_manager";
|
|
4
6
|
type GraphNodes = Record<string, ComputedNode | StaticNode>;
|
|
5
7
|
export declare class GraphAI {
|
|
6
|
-
private
|
|
8
|
+
private readonly graphId;
|
|
9
|
+
private readonly data;
|
|
10
|
+
private readonly loop?;
|
|
11
|
+
private readonly logs;
|
|
12
|
+
readonly callbackDictonary: AgentFunctionDictonary;
|
|
13
|
+
readonly taskManager: TaskManager;
|
|
7
14
|
nodes: GraphNodes;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
isRunning: boolean;
|
|
11
|
-
private runningNodes;
|
|
12
|
-
private nodeQueue;
|
|
15
|
+
onLogCallback: (__log: TransactionLog, __isUpdate: boolean) => void;
|
|
16
|
+
verbose: boolean;
|
|
13
17
|
private onComplete;
|
|
14
|
-
private concurrency;
|
|
15
|
-
private loop?;
|
|
16
18
|
private repeatCount;
|
|
17
|
-
verbose: boolean;
|
|
18
|
-
private logs;
|
|
19
19
|
private createNodes;
|
|
20
20
|
private getValueFromResults;
|
|
21
21
|
private initializeNodes;
|
|
22
|
-
constructor(data: GraphData, callbackDictonary:
|
|
22
|
+
constructor(data: GraphData, callbackDictonary: AgentFunctionDictonary, taskManager?: TaskManager | undefined);
|
|
23
23
|
getCallback(agentId?: string): import("./type").AgentFunction<any, any, any>;
|
|
24
24
|
asString(): string;
|
|
25
|
-
results(): ResultDataDictonary
|
|
25
|
+
results<T = DefaultResultData>(all: boolean): ResultDataDictonary<T>;
|
|
26
26
|
errors(): Record<string, Error>;
|
|
27
27
|
private pushReadyNodesIntoQueue;
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
private pushQueueIfReady;
|
|
29
|
+
pushQueueIfReadyAndRunning(node: ComputedNode): void;
|
|
30
30
|
pushQueue(node: ComputedNode): void;
|
|
31
|
-
|
|
31
|
+
run<T = DefaultResultData>(all?: boolean): Promise<ResultDataDictonary<T>>;
|
|
32
|
+
isRunning(): boolean;
|
|
33
|
+
onExecutionComplete(node: ComputedNode): void;
|
|
34
|
+
private processLoopIfNecessary;
|
|
35
|
+
setLoopLog(log: TransactionLog): void;
|
|
32
36
|
appendLog(log: TransactionLog): void;
|
|
37
|
+
updateLog(log: TransactionLog): void;
|
|
33
38
|
transactionLogs(): TransactionLog[];
|
|
34
|
-
injectValue(nodeId: string, value: ResultData): void;
|
|
35
|
-
resultsOf(sources: Array<DataSource
|
|
39
|
+
injectValue(nodeId: string, value: ResultData, injectFrom?: string): void;
|
|
40
|
+
resultsOf(sources: Array<DataSource>, anyInput?: boolean): any[];
|
|
36
41
|
}
|