@librechat/agents 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/common/enum.cjs +108 -0
  3. package/dist/cjs/common/enum.cjs.map +1 -0
  4. package/dist/cjs/events.cjs +104 -0
  5. package/dist/cjs/events.cjs.map +1 -0
  6. package/dist/cjs/graphs/Graph.cjs +313 -0
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -0
  8. package/dist/cjs/llm/providers.cjs +30 -0
  9. package/dist/cjs/llm/providers.cjs.map +1 -0
  10. package/dist/cjs/main.cjs +59 -0
  11. package/dist/cjs/main.cjs.map +1 -0
  12. package/dist/cjs/messages.cjs +195 -0
  13. package/dist/cjs/messages.cjs.map +1 -0
  14. package/dist/cjs/run.cjs +106 -0
  15. package/dist/cjs/run.cjs.map +1 -0
  16. package/dist/cjs/stream.cjs +133 -0
  17. package/dist/cjs/stream.cjs.map +1 -0
  18. package/dist/cjs/tools/ToolNode.cjs +80 -0
  19. package/dist/cjs/tools/ToolNode.cjs.map +1 -0
  20. package/dist/cjs/utils/graph.cjs +16 -0
  21. package/dist/cjs/utils/graph.cjs.map +1 -0
  22. package/dist/cjs/utils/run.cjs +59 -0
  23. package/dist/cjs/utils/run.cjs.map +1 -0
  24. package/dist/esm/common/enum.mjs +108 -0
  25. package/dist/esm/common/enum.mjs.map +1 -0
  26. package/dist/esm/events.mjs +97 -0
  27. package/dist/esm/events.mjs.map +1 -0
  28. package/dist/esm/graphs/Graph.mjs +310 -0
  29. package/dist/esm/graphs/Graph.mjs.map +1 -0
  30. package/dist/esm/llm/providers.mjs +27 -0
  31. package/dist/esm/llm/providers.mjs.map +1 -0
  32. package/dist/esm/main.mjs +9 -0
  33. package/dist/esm/main.mjs.map +1 -0
  34. package/dist/esm/messages.mjs +190 -0
  35. package/dist/esm/messages.mjs.map +1 -0
  36. package/dist/esm/run.mjs +104 -0
  37. package/dist/esm/run.mjs.map +1 -0
  38. package/dist/esm/stream.mjs +131 -0
  39. package/dist/esm/stream.mjs.map +1 -0
  40. package/dist/esm/tools/ToolNode.mjs +77 -0
  41. package/dist/esm/tools/ToolNode.mjs.map +1 -0
  42. package/dist/esm/utils/graph.mjs +13 -0
  43. package/dist/esm/utils/graph.mjs.map +1 -0
  44. package/dist/esm/utils/run.mjs +57 -0
  45. package/dist/esm/utils/run.mjs.map +1 -0
  46. package/dist/types/common/enum.d.ts +79 -0
  47. package/dist/types/common/index.d.ts +1 -0
  48. package/dist/types/events.d.ts +22 -0
  49. package/dist/types/graphs/Graph.d.ts +86 -0
  50. package/dist/types/graphs/index.d.ts +1 -0
  51. package/dist/types/index.d.ts +8 -0
  52. package/dist/types/llm/providers.d.ts +4 -0
  53. package/dist/types/messages.d.ts +10 -0
  54. package/dist/types/prompts/collab.d.ts +1 -0
  55. package/dist/types/prompts/index.d.ts +2 -0
  56. package/dist/types/prompts/taskmanager.d.ts +41 -0
  57. package/dist/types/run.d.ts +21 -0
  58. package/dist/types/scripts/args.d.ts +6 -0
  59. package/dist/types/scripts/cli.d.ts +1 -0
  60. package/dist/types/scripts/cli2.d.ts +1 -0
  61. package/dist/types/scripts/cli3.d.ts +1 -0
  62. package/dist/types/scripts/cli4.d.ts +1 -0
  63. package/dist/types/scripts/cli5.d.ts +1 -0
  64. package/dist/types/scripts/empty_input.d.ts +1 -0
  65. package/dist/types/stream.d.ts +5 -0
  66. package/dist/types/tools/ToolNode.d.ts +15 -0
  67. package/dist/types/tools/example.d.ts +26 -0
  68. package/dist/types/types/graph.d.ts +108 -0
  69. package/dist/types/types/index.d.ts +5 -0
  70. package/dist/types/types/llm.d.ts +25 -0
  71. package/dist/types/types/run.d.ts +53 -0
  72. package/dist/types/types/stream.d.ts +134 -0
  73. package/dist/types/types/tools.d.ts +24 -0
  74. package/dist/types/utils/graph.d.ts +2 -0
  75. package/dist/types/utils/index.d.ts +2 -0
  76. package/dist/types/utils/llmConfig.d.ts +2 -0
  77. package/dist/types/utils/logging.d.ts +1 -0
  78. package/dist/types/utils/run.d.ts +20 -0
  79. package/package.json +142 -0
  80. package/src/common/enum.ts +121 -0
  81. package/src/common/index.ts +2 -0
  82. package/src/events.ts +110 -0
  83. package/src/graphs/Graph.ts +416 -0
  84. package/src/graphs/index.ts +1 -0
  85. package/src/index.ts +15 -0
  86. package/src/llm/providers.ts +27 -0
  87. package/src/messages.ts +210 -0
  88. package/src/prompts/collab.ts +6 -0
  89. package/src/prompts/index.ts +2 -0
  90. package/src/prompts/taskmanager.ts +61 -0
  91. package/src/proto/CollabGraph.ts +269 -0
  92. package/src/proto/TaskManager.ts +243 -0
  93. package/src/proto/collab.ts +200 -0
  94. package/src/proto/collab_design.ts +184 -0
  95. package/src/proto/collab_design_v2.ts +224 -0
  96. package/src/proto/collab_design_v3.ts +255 -0
  97. package/src/proto/collab_design_v4.ts +220 -0
  98. package/src/proto/collab_design_v5.ts +251 -0
  99. package/src/proto/collab_graph.ts +181 -0
  100. package/src/proto/collab_original.ts +123 -0
  101. package/src/proto/example.ts +93 -0
  102. package/src/proto/example_new.ts +68 -0
  103. package/src/proto/example_old.ts +201 -0
  104. package/src/proto/example_test.ts +152 -0
  105. package/src/proto/example_test_anthropic.ts +100 -0
  106. package/src/proto/log_stream.ts +202 -0
  107. package/src/proto/main_collab_community_event.ts +133 -0
  108. package/src/proto/main_collab_design_v2.ts +96 -0
  109. package/src/proto/main_collab_design_v4.ts +100 -0
  110. package/src/proto/main_collab_design_v5.ts +135 -0
  111. package/src/proto/main_collab_global_analysis.ts +122 -0
  112. package/src/proto/main_collab_hackathon_event.ts +153 -0
  113. package/src/proto/main_collab_space_mission.ts +153 -0
  114. package/src/proto/main_philosophy.ts +210 -0
  115. package/src/proto/original_script.ts +126 -0
  116. package/src/proto/standard.ts +100 -0
  117. package/src/proto/stream.ts +56 -0
  118. package/src/proto/tasks.ts +118 -0
  119. package/src/proto/tools/global_analysis_tools.ts +86 -0
  120. package/src/proto/tools/space_mission_tools.ts +60 -0
  121. package/src/proto/vertexai.ts +54 -0
  122. package/src/run.ts +132 -0
  123. package/src/scripts/args.ts +42 -0
  124. package/src/scripts/cli.ts +166 -0
  125. package/src/scripts/cli2.ts +124 -0
  126. package/src/scripts/cli3.ts +175 -0
  127. package/src/scripts/cli4.ts +182 -0
  128. package/src/scripts/cli5.ts +182 -0
  129. package/src/scripts/empty_input.ts +136 -0
  130. package/src/stream.ts +145 -0
  131. package/src/tools/ToolNode.ts +108 -0
  132. package/src/tools/example.ts +52 -0
  133. package/src/types/graph.ts +126 -0
  134. package/src/types/index.ts +6 -0
  135. package/src/types/llm.ts +38 -0
  136. package/src/types/run.ts +56 -0
  137. package/src/types/stream.ts +174 -0
  138. package/src/types/tools.ts +31 -0
  139. package/src/utils/graph.ts +11 -0
  140. package/src/utils/index.ts +2 -0
  141. package/src/utils/llmConfig.ts +50 -0
  142. package/src/utils/logging.ts +48 -0
  143. package/src/utils/run.ts +91 -0
package/package.json ADDED
@@ -0,0 +1,142 @@
1
+ {
2
+ "name": "@librechat/agents",
3
+ "version": "1.4.0",
4
+ "main": "./dist/cjs/main.cjs",
5
+ "module": "./dist/esm/main.mjs",
6
+ "types": "./dist/types/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/esm/main.mjs",
10
+ "require": "./dist/cjs/main.cjs",
11
+ "types": "./dist/types/index.d.ts"
12
+ }
13
+ },
14
+ "type": "module",
15
+ "description": "",
16
+ "author": "Danny Avila",
17
+ "license": "MIT",
18
+ "licenses": [
19
+ {
20
+ "type": "MIT",
21
+ "url": "https://github.com/danny-avila/agents/blob/main/LICENSE"
22
+ }
23
+ ],
24
+ "packageManager": "npm@10.5.2",
25
+ "engines": {
26
+ "node": ">=14.0.0"
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "src",
31
+ "LICENSE",
32
+ "README.md"
33
+ ],
34
+ "scripts": {
35
+ "prepublishOnly": "npm run build",
36
+ "build": "NODE_ENV=production rollup -c && tsc -p tsconfig.build.json",
37
+ "build:dev": "rollup -c",
38
+ "start": "node dist/esm/main.js",
39
+ "clean": "node ./config/clean.js",
40
+ "script": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/cli.ts",
41
+ "bun:cli": "bun -r dotenv/config ./src/scripts/cli.ts --provider 'anthropic' --name 'Jo' --location 'New York, NY'",
42
+ "start:cli": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/cli.ts --provider 'anthropic' --name 'Jo' --location 'New York, NY'",
43
+ "start:cli2": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/cli2.ts --provider 'anthropic' --name 'Jo' --location 'New York, NY'",
44
+ "script2": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/proto/example_test.ts",
45
+ "script3": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/proto/example_test_anthropic.ts",
46
+ "script4": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/cli4.ts --name 'Jo' --location 'New York, NY'",
47
+ "script5": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/cli5.ts --name 'Jo' --location 'New York, NY'",
48
+ "start:standard": "node --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/standard.ts",
49
+ "start:cg": "node --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/collab.ts",
50
+ "start:tasks": "node --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/tasks.ts",
51
+ "start:collab": "node --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/main.ts",
52
+ "start:collab5": "node --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/collab_design_v5.ts",
53
+ "start:dev": "node --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/main.ts",
54
+ "test": "jest",
55
+ "reinstall": "npm run clean && npm ci && rm -rf ./dist && npm run build",
56
+ "re": "bun run clean && bun install && rm -rf ./dist && turbo build",
57
+ "lint": "eslint . --ext .js,.ts --fix",
58
+ "format": "prettier --write ."
59
+ },
60
+ "dependencies": {
61
+ "@aws-crypto/sha256-js": "^5.2.0",
62
+ "@aws-sdk/credential-provider-node": "^3.613.0",
63
+ "@aws-sdk/types": "^3.609.0",
64
+ "@langchain/anthropic": "^0.2.14",
65
+ "@langchain/aws": "^0.0.6",
66
+ "@langchain/community": "^0.2.20",
67
+ "@langchain/core": "^0.2.18",
68
+ "@langchain/google-vertexai": "^0.0.20",
69
+ "@langchain/langgraph": "^0.0.31",
70
+ "@langchain/mistralai": "^0.0.26",
71
+ "@smithy/eventstream-codec": "^2.2.0",
72
+ "@smithy/protocol-http": "^3.0.6",
73
+ "@smithy/signature-v4": "^2.0.10",
74
+ "@smithy/util-utf8": "^2.0.0",
75
+ "dotenv": "^16.4.5",
76
+ "langchain": "^0.2.10",
77
+ "nanoid": "^3.3.4"
78
+ },
79
+ "resolutions": {
80
+ "@langchain/core": "0.2.18",
81
+ "@smithy/eventstream-codec": "^2.2.0",
82
+ "@smithy/protocol-http": "^3.0.6",
83
+ "@smithy/signature-v4": "^2.0.10",
84
+ "@smithy/util-utf8": "^2.0.0"
85
+ },
86
+ "imports": {
87
+ "@/*": "./src/*",
88
+ "~/*": "./*"
89
+ },
90
+ "devDependencies": {
91
+ "@rollup/plugin-alias": "^5.1.0",
92
+ "@rollup/plugin-commonjs": "^26.0.1",
93
+ "@rollup/plugin-json": "^6.1.0",
94
+ "@rollup/plugin-node-resolve": "^15.2.3",
95
+ "@rollup/plugin-terser": "^0.4.4",
96
+ "@rollup/plugin-typescript": "^11.1.6",
97
+ "@swc/core": "^1.6.13",
98
+ "@types/babel__generator": "^7.6.8",
99
+ "@types/babel__template": "^7.4.4",
100
+ "@types/istanbul-lib-report": "^3.0.3",
101
+ "@types/jest": "^29.5.12",
102
+ "@types/node": "^20.14.11",
103
+ "@types/rollup": "^0.54.0",
104
+ "@types/yargs-parser": "^21.0.3",
105
+ "@typescript-eslint/eslint-plugin": "^7.16.1",
106
+ "@typescript-eslint/parser": "^7.16.1",
107
+ "better-sqlite3": "^9.6.0",
108
+ "concurrently": "^8.2.2",
109
+ "cross-env": "^7.0.3",
110
+ "eslint": "^8.57.0",
111
+ "eslint-import-resolver-typescript": "^3.6.1",
112
+ "eslint-plugin-import": "^2.29.1",
113
+ "husky": "^9.0.11",
114
+ "javascript-obfuscator": "^4.1.1",
115
+ "jest": "^29.7.0",
116
+ "lint-staged": "^15.2.7",
117
+ "nodemon": "^3.1.4",
118
+ "prettier": "^3.3.2",
119
+ "rimraf": "^6.0.0",
120
+ "rollup": "^4.18.1",
121
+ "rollup-plugin-cleandir": "^2.0.0",
122
+ "rollup-plugin-cleaner": "^1.0.0",
123
+ "rollup-plugin-obfuscator": "^1.1.0",
124
+ "rollup-plugin-visualizer": "^5.12.0",
125
+ "ts-jest": "^29.2.0",
126
+ "ts-node": "^10.9.2",
127
+ "ts-node-dev": "^2.0.0",
128
+ "tsc-alias": "^1.8.10",
129
+ "tsconfig-paths": "^4.2.0",
130
+ "tslib": "^2.6.3",
131
+ "typescript": "^5.5.3"
132
+ },
133
+ "lint-staged": {
134
+ "*.{js,ts}": [
135
+ "eslint --fix",
136
+ "prettier --write"
137
+ ],
138
+ "*.{json,md}": [
139
+ "prettier --write"
140
+ ]
141
+ }
142
+ }
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Enum representing the various event types emitted during the execution of runnables.
3
+ * These events provide real-time information about the progress and state of different components.
4
+ *
5
+ * @enum {string}
6
+ */
7
+ export enum GraphEvents {
8
+ /* Custom Events */
9
+
10
+ /** [Custom] Delta event for run steps (message creation and tool calls) */
11
+ ON_RUN_STEP = 'on_run_step',
12
+ /** [Custom] Delta event for run steps (tool calls) */
13
+ ON_RUN_STEP_DELTA = 'on_run_step_delta',
14
+ /** [Custom] Completed event for run steps (tool calls) */
15
+ ON_RUN_STEP_COMPLETED = 'on_run_step_completed',
16
+ /** [Custom] Delta events for messages */
17
+ ON_MESSAGE_DELTA = 'on_message_delta',
18
+
19
+ /* Official Events */
20
+
21
+ /** Custom event, emitted by system */
22
+ ON_CUSTOM_EVENT = 'on_custom_event',
23
+ /** Emitted when a chat model starts processing. */
24
+ CHAT_MODEL_START = 'on_chat_model_start',
25
+
26
+ /** Emitted when a chat model streams a chunk of its response. */
27
+ CHAT_MODEL_STREAM = 'on_chat_model_stream',
28
+
29
+ /** Emitted when a chat model completes its processing. */
30
+ CHAT_MODEL_END = 'on_chat_model_end',
31
+
32
+ /** Emitted when a language model starts processing. */
33
+ LLM_START = 'on_llm_start',
34
+
35
+ /** Emitted when a language model streams a chunk of its response. */
36
+ LLM_STREAM = 'on_llm_stream',
37
+
38
+ /** Emitted when a language model completes its processing. */
39
+ LLM_END = 'on_llm_end',
40
+
41
+ /** Emitted when a chain starts processing. */
42
+ CHAIN_START = 'on_chain_start',
43
+
44
+ /** Emitted when a chain streams a chunk of its output. */
45
+ CHAIN_STREAM = 'on_chain_stream',
46
+
47
+ /** Emitted when a chain completes its processing. */
48
+ CHAIN_END = 'on_chain_end',
49
+
50
+ /** Emitted when a tool starts its operation. */
51
+ TOOL_START = 'on_tool_start',
52
+
53
+ /** Emitted when a tool completes its operation. */
54
+ TOOL_END = 'on_tool_end',
55
+
56
+ /** Emitted when a retriever starts its operation. */
57
+ RETRIEVER_START = 'on_retriever_start',
58
+
59
+ /** Emitted when a retriever completes its operation. */
60
+ RETRIEVER_END = 'on_retriever_end',
61
+
62
+ /** Emitted when a prompt starts processing. */
63
+ PROMPT_START = 'on_prompt_start',
64
+
65
+ /** Emitted when a prompt completes its processing. */
66
+ PROMPT_END = 'on_prompt_end'
67
+ }
68
+
69
+ export enum Providers {
70
+ OPENAI = 'openAI',
71
+ BEDROCK = 'bedrock',
72
+ VERTEXAI = 'vertexai',
73
+ AWS = 'aws',
74
+ ANTHROPIC = 'anthropic',
75
+ MISTRALAI = 'mistralai',
76
+ }
77
+
78
+ export enum GraphNodeKeys {
79
+ TOOLS = 'tools',
80
+ AGENT = 'agent',
81
+ PRE_TOOLS = 'pre_tools',
82
+ POST_TOOLS = 'post_tools',
83
+ }
84
+
85
+ export enum GraphNodeActions {
86
+ TOOL_NODE = 'tool_node',
87
+ CALL_MODEL = 'call_model',
88
+ ROUTE_MESSAGE = 'route_message',
89
+ }
90
+
91
+ export enum CommonEvents {
92
+ LANGGRAPH = 'LangGraph',
93
+ }
94
+
95
+ export enum StepTypes {
96
+ TOOL_CALLS = 'tool_calls',
97
+ MESSAGE_CREATION = 'message_creation'
98
+ }
99
+
100
+ export enum Callback {
101
+ TOOL_ERROR = 'handleToolError',
102
+ TOOL_START = 'handleToolStart',
103
+ TOOL_END = 'handleToolEnd',
104
+ /*
105
+ LLM_START = 'handleLLMStart',
106
+ LLM_NEW_TOKEN = 'handleLLMNewToken',
107
+ LLM_ERROR = 'handleLLMError',
108
+ LLM_END = 'handleLLMEnd',
109
+ CHAT_MODEL_START = 'handleChatModelStart',
110
+ CHAIN_START = 'handleChainStart',
111
+ CHAIN_ERROR = 'handleChainError',
112
+ CHAIN_END = 'handleChainEnd',
113
+ TEXT = 'handleText',
114
+ AGENT_ACTION = 'handleAgentAction',
115
+ AGENT_END = 'handleAgentEnd',
116
+ RETRIEVER_START = 'handleRetrieverStart',
117
+ RETRIEVER_END = 'handleRetrieverEnd',
118
+ RETRIEVER_ERROR = 'handleRetrieverError',
119
+ CUSTOM_EVENT = 'handleCustomEvent'
120
+ */
121
+ }
@@ -0,0 +1,2 @@
1
+ // src/common/index.ts
2
+ export * from './enum';
package/src/events.ts ADDED
@@ -0,0 +1,110 @@
1
+ /* eslint-disable no-console */
2
+ // src/events.ts
3
+ import type { AIMessage } from '@langchain/core/messages';
4
+ import type { Graph } from '@/graphs';
5
+ import type * as t from '@/types';
6
+
7
+ export class HandlerRegistry {
8
+ private handlers: Map<string, t.EventHandler> = new Map();
9
+
10
+ register(eventType: string, handler: t.EventHandler): void {
11
+ this.handlers.set(eventType, handler);
12
+ }
13
+
14
+ getHandler(eventType: string): t.EventHandler | undefined {
15
+ return this.handlers.get(eventType);
16
+ }
17
+ }
18
+
19
+ export class ModelEndHandler implements t.EventHandler {
20
+ handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void {
21
+ if (!graph || !metadata) {
22
+ console.warn(`Graph or metadata not found in ${event} event`);
23
+ return;
24
+ }
25
+
26
+ // const messageType = (data?.output as BaseMessage | undefined)?._getType();
27
+ // console.log('messageType', messageType);
28
+ const usage = (data?.output as AIMessage)?.usage_metadata;
29
+
30
+ // const stepKey = graph.getStepKey(metadata);
31
+ // const stepId = graph.getStepIdByKey(stepKey);
32
+ // const step = graph.getRunStep(stepId);
33
+
34
+ console.log(`====== ${event.toUpperCase()} ======`);
35
+ console.dir({
36
+ usage,
37
+ }, { depth: null });
38
+ }
39
+ }
40
+
41
+ export class ToolEndHandler implements t.EventHandler {
42
+ handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void {
43
+ if (!graph || !metadata) {
44
+ console.warn(`Graph or metadata not found in ${event} event`);
45
+ return;
46
+ }
47
+
48
+ if (!data?.output) {
49
+ console.warn('No output found in tool_end event');
50
+ return;
51
+ }
52
+
53
+ graph.handleToolCallCompleted({ input: data.input, output: data.output } as t.ToolEndData);
54
+ }
55
+ }
56
+
57
+ export class TestLLMStreamHandler implements t.EventHandler {
58
+ handle(event: string, data: t.StreamEventData): void {
59
+ const chunk = data?.chunk;
60
+ const isMessageChunk = !!(chunk && 'message' in chunk);
61
+ const msg = isMessageChunk && chunk?.message;
62
+ if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {
63
+ console.log(msg.tool_call_chunks);
64
+ } else if (msg && msg.content) {
65
+ if (typeof msg.content === 'string') {
66
+ process.stdout.write(msg.content);
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ export class TestChatStreamHandler implements t.EventHandler {
73
+ handle(event: string, data: t.StreamEventData): void {
74
+ const chunk = data?.chunk;
75
+ const isContentChunk = !!(chunk && 'content' in chunk);
76
+ const content = isContentChunk && chunk?.content;
77
+
78
+ if (!content || !isContentChunk) {
79
+ return;
80
+ }
81
+
82
+ if (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) {
83
+ console.dir(chunk.tool_call_chunks, { depth: null });
84
+ }
85
+
86
+ if (typeof content === 'string') {
87
+ process.stdout.write(content);
88
+ } else {
89
+ console.dir(content, { depth: null });
90
+ }
91
+ }
92
+ }
93
+
94
+ export class LLMStreamHandler implements t.EventHandler {
95
+ handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void {
96
+ const chunk = data?.chunk;
97
+ const isMessageChunk = !!(chunk && 'message' in chunk);
98
+ const msg = isMessageChunk && chunk?.message;
99
+ if (metadata) { console.log(metadata); }
100
+ if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {
101
+ console.log(msg.tool_call_chunks);
102
+ } else if (msg && msg.content) {
103
+ if (typeof msg.content === 'string') {
104
+ // const text_delta = msg.content;
105
+ // dispatchCustomEvent(GraphEvents.CHAT_MODEL_STREAM, { chunk }, config);
106
+ process.stdout.write(msg.content);
107
+ }
108
+ }
109
+ }
110
+ }