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.
Files changed (100) hide show
  1. package/README.md +7 -5
  2. package/lib/experimental_agents/array_agents/index.d.ts +3 -0
  3. package/lib/experimental_agents/array_agents/index.js +9 -0
  4. package/lib/experimental_agents/array_agents/pop_agent.d.ts +2 -0
  5. package/lib/experimental_agents/array_agents/pop_agent.js +15 -0
  6. package/lib/experimental_agents/array_agents/push_agent.d.ts +2 -0
  7. package/lib/experimental_agents/array_agents/push_agent.js +14 -0
  8. package/lib/experimental_agents/array_agents/shift_agent.d.ts +2 -0
  9. package/lib/experimental_agents/{array_agents.js → array_agents/shift_agent.js} +2 -17
  10. package/lib/experimental_agents/data_agents/data_object_merge_template_agent.d.ts +2 -0
  11. package/lib/experimental_agents/data_agents/data_object_merge_template_agent.js +13 -0
  12. package/lib/experimental_agents/data_agents/data_sum_template_agent.d.ts +17 -0
  13. package/lib/experimental_agents/data_agents/data_sum_template_agent.js +30 -0
  14. package/lib/experimental_agents/data_agents/index.d.ts +3 -0
  15. package/lib/experimental_agents/data_agents/index.js +9 -0
  16. package/lib/experimental_agents/data_agents/total_agent.d.ts +46 -0
  17. package/lib/experimental_agents/data_agents/total_agent.js +51 -0
  18. package/lib/experimental_agents/embedding_agent.d.ts +6 -0
  19. package/lib/experimental_agents/embedding_agent.js +43 -0
  20. package/lib/experimental_agents/index.d.ts +8 -3
  21. package/lib/experimental_agents/index.js +8 -3
  22. package/lib/experimental_agents/map_agent.d.ts +4 -0
  23. package/lib/experimental_agents/map_agent.js +46 -0
  24. package/lib/experimental_agents/matrix_agent.d.ts +9 -0
  25. package/lib/experimental_agents/matrix_agent.js +50 -0
  26. package/lib/experimental_agents/nested_agent.d.ts +2 -2
  27. package/lib/experimental_agents/nested_agent.js +14 -8
  28. package/lib/experimental_agents/slashgpt_agent.d.ts +1 -1
  29. package/lib/experimental_agents/slashgpt_agent.js +2 -7
  30. package/lib/experimental_agents/sleeper_agents/index.d.ts +2 -0
  31. package/lib/experimental_agents/sleeper_agents/index.js +7 -0
  32. package/lib/experimental_agents/sleeper_agents/sleeper_agent.d.ts +5 -0
  33. package/lib/experimental_agents/sleeper_agents/sleeper_agent.js +16 -0
  34. package/lib/experimental_agents/sleeper_agents/sleeper_agent_debug.d.ts +6 -0
  35. package/lib/experimental_agents/{sleeper_agent.js → sleeper_agents/sleeper_agent_debug.js} +4 -13
  36. package/lib/experimental_agents/string_agents/index.d.ts +2 -0
  37. package/lib/experimental_agents/string_agents/index.js +7 -0
  38. package/lib/experimental_agents/string_agents/string_splitter_agent.d.ts +7 -0
  39. package/lib/experimental_agents/string_agents/string_splitter_agent.js +24 -0
  40. package/lib/experimental_agents/string_agents/string_template_agent.d.ts +4 -0
  41. package/lib/experimental_agents/{string_agent.js → string_agents/string_template_agent.js} +2 -5
  42. package/lib/experimental_agents/test_agents/bypass_agent.d.ts +2 -0
  43. package/lib/experimental_agents/test_agents/bypass_agent.js +10 -0
  44. package/lib/experimental_agents/test_agents/copy_message_agent.d.ts +2 -0
  45. package/lib/experimental_agents/test_agents/copy_message_agent.js +11 -0
  46. package/lib/experimental_agents/test_agents/counting_agent.d.ts +2 -0
  47. package/lib/experimental_agents/test_agents/counting_agent.js +11 -0
  48. package/lib/experimental_agents/test_agents/echo_agent.d.ts +2 -0
  49. package/lib/experimental_agents/test_agents/echo_agent.js +7 -0
  50. package/lib/experimental_agents/test_agents/echo_fork_index_agent.d.ts +2 -0
  51. package/lib/experimental_agents/test_agents/echo_fork_index_agent.js +7 -0
  52. package/lib/experimental_agents/test_agents/index.d.ts +5 -0
  53. package/lib/experimental_agents/test_agents/index.js +13 -0
  54. package/lib/experimental_agents/test_agents/merge_node_id_agent.d.ts +2 -0
  55. package/lib/experimental_agents/test_agents/merge_node_id_agent.js +10 -0
  56. package/lib/experimental_agents/token_agent.d.ts +6 -0
  57. package/lib/experimental_agents/token_agent.js +33 -0
  58. package/lib/graphai.d.ts +23 -18
  59. package/lib/graphai.js +110 -115
  60. package/lib/index.d.ts +2 -0
  61. package/lib/log.d.ts +22 -6
  62. package/lib/log.js +45 -44
  63. package/lib/node.d.ts +31 -25
  64. package/lib/node.js +136 -97
  65. package/lib/task.d.ts +18 -0
  66. package/lib/task.js +63 -0
  67. package/lib/task_manager.d.ts +20 -0
  68. package/lib/task_manager.js +69 -0
  69. package/lib/transaction_log.d.ts +27 -0
  70. package/lib/transaction_log.js +56 -0
  71. package/lib/type.d.ts +45 -32
  72. package/lib/type.js +1 -0
  73. package/lib/utils/utils.d.ts +3 -1
  74. package/lib/utils/utils.js +17 -6
  75. package/lib/validator.d.ts +2 -0
  76. package/lib/validator.js +28 -0
  77. package/lib/validators/agent_validator.d.ts +1 -0
  78. package/lib/validators/agent_validator.js +12 -0
  79. package/lib/validators/common.d.ts +3 -0
  80. package/lib/validators/common.js +6 -0
  81. package/lib/validators/computed_node_validator.d.ts +2 -0
  82. package/lib/validators/computed_node_validator.js +13 -0
  83. package/lib/validators/graph_data_validator.d.ts +3 -0
  84. package/lib/validators/graph_data_validator.js +43 -0
  85. package/lib/validators/nodeValidator.d.ts +2 -0
  86. package/lib/validators/nodeValidator.js +13 -0
  87. package/lib/validators/relation_validator.d.ts +2 -0
  88. package/lib/validators/relation_validator.js +62 -0
  89. package/lib/validators/static_node_validator.d.ts +2 -0
  90. package/lib/validators/static_node_validator.js +13 -0
  91. package/package.json +3 -5
  92. package/lib/experimental_agents/array_agents.d.ts +0 -4
  93. package/lib/experimental_agents/data_agent.d.ts +0 -3
  94. package/lib/experimental_agents/data_agent.js +0 -25
  95. package/lib/experimental_agents/sleeper_agent.d.ts +0 -10
  96. package/lib/experimental_agents/string_agent.d.ts +0 -7
  97. package/lib/graphai_cli.d.ts +0 -2
  98. package/lib/graphai_cli.js +0 -37
  99. package/lib/utils.d.ts +0 -7
  100. 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;
@@ -0,0 +1,6 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const sleeperAgentDebug: AgentFunction<{
3
+ duration: number;
4
+ value?: Record<string, any>;
5
+ fail?: boolean;
6
+ }>;
@@ -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 = exports.sleeperAgent = void 0;
7
- const utils_1 = require("../utils/utils");
6
+ exports.sleeperAgentDebug = void 0;
7
+ const utils_1 = require("../../utils/utils");
8
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);
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,2 @@
1
+ export { stringSplitterAgent } from "../../experimental_agents/string_agents/string_splitter_agent";
2
+ export { stringTemplateAgent } from "../../experimental_agents/string_agents/string_template_agent";
@@ -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,7 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const stringSplitterAgent: AgentFunction<{
3
+ chunkSize?: number;
4
+ overlap?: number;
5
+ }, {
6
+ contents: Array<string>;
7
+ }, string>;
@@ -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;
@@ -0,0 +1,4 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const stringTemplateAgent: AgentFunction<{
3
+ template: string;
4
+ }, Record<string, any> | string, string>;
@@ -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 ({ nodeId, params, inputs, verbose }) => {
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[params.inputKey ?? "content"]);
8
+ return template.replace("${" + index + "}", input);
12
9
  }, params.template);
13
10
  return { content };
14
11
  };
@@ -0,0 +1,2 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const bypassAgent: AgentFunction;
@@ -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,2 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const copyMessageAgent: AgentFunction;
@@ -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,2 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const countingAgent: AgentFunction;
@@ -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,2 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const echoAgent: AgentFunction;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.echoAgent = void 0;
4
+ const echoAgent = async ({ params }) => {
5
+ return params;
6
+ };
7
+ exports.echoAgent = echoAgent;
@@ -0,0 +1,2 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const echoForkIndexAgent: AgentFunction;
@@ -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,2 @@
1
+ import { AgentFunction } from "../../graphai";
2
+ export declare const mergeNodeIdAgent: AgentFunction;
@@ -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,6 @@
1
+ import { AgentFunction } from "../graphai";
2
+ export declare const tokenBoundStringsAgent: AgentFunction<{
3
+ limit?: number;
4
+ }, {
5
+ content: string;
6
+ }, Array<string>>;
@@ -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, TransactionLog, ResultDataDictonary, ResultData, CallbackDictonaryArgs } from "./type";
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 data;
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
- agentId?: string;
9
- callbackDictonary: AgentFunctionDictonary;
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: CallbackDictonaryArgs);
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
- run(): Promise<ResultDataDictonary>;
29
- private runNode;
28
+ private pushQueueIfReady;
29
+ pushQueueIfReadyAndRunning(node: ComputedNode): void;
30
30
  pushQueue(node: ComputedNode): void;
31
- removeRunning(node: ComputedNode): void;
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>): any[];
39
+ injectValue(nodeId: string, value: ResultData, injectFrom?: string): void;
40
+ resultsOf(sources: Array<DataSource>, anyInput?: boolean): any[];
36
41
  }