@librechat/agents 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/events.cjs +3 -8
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/esm/events.mjs +3 -8
- package/dist/esm/events.mjs.map +1 -1
- package/dist/types/events.d.ts +5 -5
- package/dist/types/types/graph.d.ts +4 -1
- package/package.json +2 -2
- package/src/events.ts +9 -16
- package/src/scripts/simple.ts +2 -2
- package/src/types/graph.ts +5 -2
package/dist/cjs/events.cjs
CHANGED
|
@@ -15,12 +15,7 @@ class ModelEndHandler {
|
|
|
15
15
|
console.warn(`Graph or metadata not found in ${event} event`);
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
-
// const messageType = (data?.output as BaseMessage | undefined)?._getType();
|
|
19
|
-
// console.log('messageType', messageType);
|
|
20
18
|
const usage = data?.output?.usage_metadata;
|
|
21
|
-
// const stepKey = graph.getStepKey(metadata);
|
|
22
|
-
// const stepId = graph.getStepIdByKey(stepKey);
|
|
23
|
-
// const step = graph.getRunStep(stepId);
|
|
24
19
|
console.log(`====== ${event.toUpperCase()} ======`);
|
|
25
20
|
console.dir({
|
|
26
21
|
usage,
|
|
@@ -44,7 +39,7 @@ class TestLLMStreamHandler {
|
|
|
44
39
|
handle(event, data) {
|
|
45
40
|
const chunk = data?.chunk;
|
|
46
41
|
const isMessageChunk = !!(chunk && 'message' in chunk);
|
|
47
|
-
const msg = isMessageChunk && chunk
|
|
42
|
+
const msg = isMessageChunk && chunk.message;
|
|
48
43
|
if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {
|
|
49
44
|
console.log(msg.tool_call_chunks);
|
|
50
45
|
}
|
|
@@ -59,7 +54,7 @@ class TestChatStreamHandler {
|
|
|
59
54
|
handle(event, data) {
|
|
60
55
|
const chunk = data?.chunk;
|
|
61
56
|
const isContentChunk = !!(chunk && 'content' in chunk);
|
|
62
|
-
const content = isContentChunk && chunk
|
|
57
|
+
const content = isContentChunk && chunk.content;
|
|
63
58
|
if (!content || !isContentChunk) {
|
|
64
59
|
return;
|
|
65
60
|
}
|
|
@@ -78,7 +73,7 @@ class LLMStreamHandler {
|
|
|
78
73
|
handle(event, data, metadata) {
|
|
79
74
|
const chunk = data?.chunk;
|
|
80
75
|
const isMessageChunk = !!(chunk && 'message' in chunk);
|
|
81
|
-
const msg = isMessageChunk && chunk
|
|
76
|
+
const msg = isMessageChunk && chunk.message;
|
|
82
77
|
if (metadata) {
|
|
83
78
|
console.log(metadata);
|
|
84
79
|
}
|
package/dist/cjs/events.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.cjs","sources":["../../src/events.ts"],"sourcesContent":["/* eslint-disable no-console */\n// src/events.ts\nimport type {
|
|
1
|
+
{"version":3,"file":"events.cjs","sources":["../../src/events.ts"],"sourcesContent":["/* eslint-disable no-console */\n// src/events.ts\nimport type { Graph } from '@/graphs';\nimport type * as t from '@/types';\n\nexport class HandlerRegistry {\n private handlers: Map<string, t.EventHandler> = new Map();\n\n register(eventType: string, handler: t.EventHandler): void {\n this.handlers.set(eventType, handler);\n }\n\n getHandler(eventType: string): t.EventHandler | undefined {\n return this.handlers.get(eventType);\n }\n}\n\nexport class ModelEndHandler implements t.EventHandler {\n handle(event: string, data: t.ModelEndData, metadata?: Record<string, unknown>, graph?: Graph): void {\n if (!graph || !metadata) {\n console.warn(`Graph or metadata not found in ${event} event`);\n return;\n }\n\n const usage = data?.output?.usage_metadata;\n\n console.log(`====== ${event.toUpperCase()} ======`);\n console.dir({\n usage,\n }, { depth: null });\n }\n}\n\nexport class ToolEndHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>, graph?: Graph): void {\n if (!graph || !metadata) {\n console.warn(`Graph or metadata not found in ${event} event`);\n return;\n }\n\n if (!data?.output) {\n console.warn('No output found in tool_end event');\n return;\n }\n\n graph.handleToolCallCompleted({ input: data.input, output: data.output } as t.ToolEndData);\n }\n}\n\nexport class TestLLMStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData | undefined): void {\n const chunk = data?.chunk;\n const isMessageChunk = !!(chunk && 'message' in chunk);\n const msg = isMessageChunk && chunk.message;\n if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {\n console.log(msg.tool_call_chunks);\n } else if (msg && msg.content) {\n if (typeof msg.content === 'string') {\n process.stdout.write(msg.content);\n }\n }\n }\n}\n\nexport class TestChatStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData | undefined): void {\n const chunk = data?.chunk;\n const isContentChunk = !!(chunk && 'content' in chunk);\n const content = isContentChunk && chunk.content;\n\n if (!content || !isContentChunk) {\n return;\n }\n\n if (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) {\n console.dir(chunk.tool_call_chunks, { depth: null });\n }\n\n if (typeof content === 'string') {\n process.stdout.write(content);\n } else {\n console.dir(content, { depth: null });\n }\n }\n}\n\nexport class LLMStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>): void {\n const chunk = data?.chunk;\n const isMessageChunk = !!(chunk && 'message' in chunk);\n const msg = isMessageChunk && chunk.message;\n if (metadata) { console.log(metadata); }\n if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {\n console.log(msg.tool_call_chunks);\n } else if (msg && msg.content) {\n if (typeof msg.content === 'string') {\n // const text_delta = msg.content;\n // dispatchCustomEvent(GraphEvents.CHAT_MODEL_STREAM, { chunk }, config);\n process.stdout.write(msg.content);\n }\n }\n }\n}\n\nexport const createMetadataAggregator = (_collected?: Record<string, unknown>[]): t.MetadataAggregatorResult => {\n const collected = _collected || [];\n\n const handleLLMEnd: t.HandleLLMEnd = (output) => {\n const { generations } = output;\n const lastMessageOutput = (generations[generations.length - 1] as (t.StreamGeneration | undefined)[] | undefined)?.[0];\n if (!lastMessageOutput) {\n return;\n }\n const { message } = lastMessageOutput;\n if (message?.response_metadata) {\n collected.push(message.response_metadata);\n }\n };\n\n return { handleLLMEnd, collected };\n};"],"names":[],"mappings":"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"}
|
package/dist/esm/events.mjs
CHANGED
|
@@ -13,12 +13,7 @@ class ModelEndHandler {
|
|
|
13
13
|
console.warn(`Graph or metadata not found in ${event} event`);
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
|
-
// const messageType = (data?.output as BaseMessage | undefined)?._getType();
|
|
17
|
-
// console.log('messageType', messageType);
|
|
18
16
|
const usage = data?.output?.usage_metadata;
|
|
19
|
-
// const stepKey = graph.getStepKey(metadata);
|
|
20
|
-
// const stepId = graph.getStepIdByKey(stepKey);
|
|
21
|
-
// const step = graph.getRunStep(stepId);
|
|
22
17
|
console.log(`====== ${event.toUpperCase()} ======`);
|
|
23
18
|
console.dir({
|
|
24
19
|
usage,
|
|
@@ -42,7 +37,7 @@ class TestLLMStreamHandler {
|
|
|
42
37
|
handle(event, data) {
|
|
43
38
|
const chunk = data?.chunk;
|
|
44
39
|
const isMessageChunk = !!(chunk && 'message' in chunk);
|
|
45
|
-
const msg = isMessageChunk && chunk
|
|
40
|
+
const msg = isMessageChunk && chunk.message;
|
|
46
41
|
if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {
|
|
47
42
|
console.log(msg.tool_call_chunks);
|
|
48
43
|
}
|
|
@@ -57,7 +52,7 @@ class TestChatStreamHandler {
|
|
|
57
52
|
handle(event, data) {
|
|
58
53
|
const chunk = data?.chunk;
|
|
59
54
|
const isContentChunk = !!(chunk && 'content' in chunk);
|
|
60
|
-
const content = isContentChunk && chunk
|
|
55
|
+
const content = isContentChunk && chunk.content;
|
|
61
56
|
if (!content || !isContentChunk) {
|
|
62
57
|
return;
|
|
63
58
|
}
|
|
@@ -76,7 +71,7 @@ class LLMStreamHandler {
|
|
|
76
71
|
handle(event, data, metadata) {
|
|
77
72
|
const chunk = data?.chunk;
|
|
78
73
|
const isMessageChunk = !!(chunk && 'message' in chunk);
|
|
79
|
-
const msg = isMessageChunk && chunk
|
|
74
|
+
const msg = isMessageChunk && chunk.message;
|
|
80
75
|
if (metadata) {
|
|
81
76
|
console.log(metadata);
|
|
82
77
|
}
|
package/dist/esm/events.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.mjs","sources":["../../src/events.ts"],"sourcesContent":["/* eslint-disable no-console */\n// src/events.ts\nimport type {
|
|
1
|
+
{"version":3,"file":"events.mjs","sources":["../../src/events.ts"],"sourcesContent":["/* eslint-disable no-console */\n// src/events.ts\nimport type { Graph } from '@/graphs';\nimport type * as t from '@/types';\n\nexport class HandlerRegistry {\n private handlers: Map<string, t.EventHandler> = new Map();\n\n register(eventType: string, handler: t.EventHandler): void {\n this.handlers.set(eventType, handler);\n }\n\n getHandler(eventType: string): t.EventHandler | undefined {\n return this.handlers.get(eventType);\n }\n}\n\nexport class ModelEndHandler implements t.EventHandler {\n handle(event: string, data: t.ModelEndData, metadata?: Record<string, unknown>, graph?: Graph): void {\n if (!graph || !metadata) {\n console.warn(`Graph or metadata not found in ${event} event`);\n return;\n }\n\n const usage = data?.output?.usage_metadata;\n\n console.log(`====== ${event.toUpperCase()} ======`);\n console.dir({\n usage,\n }, { depth: null });\n }\n}\n\nexport class ToolEndHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>, graph?: Graph): void {\n if (!graph || !metadata) {\n console.warn(`Graph or metadata not found in ${event} event`);\n return;\n }\n\n if (!data?.output) {\n console.warn('No output found in tool_end event');\n return;\n }\n\n graph.handleToolCallCompleted({ input: data.input, output: data.output } as t.ToolEndData);\n }\n}\n\nexport class TestLLMStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData | undefined): void {\n const chunk = data?.chunk;\n const isMessageChunk = !!(chunk && 'message' in chunk);\n const msg = isMessageChunk && chunk.message;\n if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {\n console.log(msg.tool_call_chunks);\n } else if (msg && msg.content) {\n if (typeof msg.content === 'string') {\n process.stdout.write(msg.content);\n }\n }\n }\n}\n\nexport class TestChatStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData | undefined): void {\n const chunk = data?.chunk;\n const isContentChunk = !!(chunk && 'content' in chunk);\n const content = isContentChunk && chunk.content;\n\n if (!content || !isContentChunk) {\n return;\n }\n\n if (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) {\n console.dir(chunk.tool_call_chunks, { depth: null });\n }\n\n if (typeof content === 'string') {\n process.stdout.write(content);\n } else {\n console.dir(content, { depth: null });\n }\n }\n}\n\nexport class LLMStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>): void {\n const chunk = data?.chunk;\n const isMessageChunk = !!(chunk && 'message' in chunk);\n const msg = isMessageChunk && chunk.message;\n if (metadata) { console.log(metadata); }\n if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {\n console.log(msg.tool_call_chunks);\n } else if (msg && msg.content) {\n if (typeof msg.content === 'string') {\n // const text_delta = msg.content;\n // dispatchCustomEvent(GraphEvents.CHAT_MODEL_STREAM, { chunk }, config);\n process.stdout.write(msg.content);\n }\n }\n }\n}\n\nexport const createMetadataAggregator = (_collected?: Record<string, unknown>[]): t.MetadataAggregatorResult => {\n const collected = _collected || [];\n\n const handleLLMEnd: t.HandleLLMEnd = (output) => {\n const { generations } = output;\n const lastMessageOutput = (generations[generations.length - 1] as (t.StreamGeneration | undefined)[] | undefined)?.[0];\n if (!lastMessageOutput) {\n return;\n }\n const { message } = lastMessageOutput;\n if (message?.response_metadata) {\n collected.push(message.response_metadata);\n }\n };\n\n return { handleLLMEnd, collected };\n};"],"names":[],"mappings":"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"}
|
package/dist/types/events.d.ts
CHANGED
|
@@ -6,18 +6,18 @@ export declare class HandlerRegistry {
|
|
|
6
6
|
getHandler(eventType: string): t.EventHandler | undefined;
|
|
7
7
|
}
|
|
8
8
|
export declare class ModelEndHandler implements t.EventHandler {
|
|
9
|
-
handle(event: string, data: t.
|
|
9
|
+
handle(event: string, data: t.ModelEndData, metadata?: Record<string, unknown>, graph?: Graph): void;
|
|
10
10
|
}
|
|
11
11
|
export declare class ToolEndHandler implements t.EventHandler {
|
|
12
|
-
handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void;
|
|
12
|
+
handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>, graph?: Graph): void;
|
|
13
13
|
}
|
|
14
14
|
export declare class TestLLMStreamHandler implements t.EventHandler {
|
|
15
|
-
handle(event: string, data: t.StreamEventData): void;
|
|
15
|
+
handle(event: string, data: t.StreamEventData | undefined): void;
|
|
16
16
|
}
|
|
17
17
|
export declare class TestChatStreamHandler implements t.EventHandler {
|
|
18
|
-
handle(event: string, data: t.StreamEventData): void;
|
|
18
|
+
handle(event: string, data: t.StreamEventData | undefined): void;
|
|
19
19
|
}
|
|
20
20
|
export declare class LLMStreamHandler implements t.EventHandler {
|
|
21
|
-
handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void;
|
|
21
|
+
handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>): void;
|
|
22
22
|
}
|
|
23
23
|
export declare const createMetadataAggregator: (_collected?: Record<string, unknown>[]) => t.MetadataAggregatorResult;
|
|
@@ -8,7 +8,7 @@ export type BaseGraphState = {
|
|
|
8
8
|
};
|
|
9
9
|
export type IState = BaseGraphState;
|
|
10
10
|
export interface EventHandler {
|
|
11
|
-
handle(event: string, data: StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void;
|
|
11
|
+
handle(event: string, data: StreamEventData | ModelEndData, metadata?: Record<string, unknown>, graph?: Graph): void;
|
|
12
12
|
}
|
|
13
13
|
export type GraphStateChannels<T extends BaseGraphState> = StateGraphArgs<T>['channels'];
|
|
14
14
|
export type Workflow<T extends BaseGraphState = BaseGraphState, U extends Partial<T> = Partial<T>, N extends string = string> = StateGraph<T, U, N>;
|
|
@@ -113,3 +113,6 @@ export type PartMetadata = {
|
|
|
113
113
|
action?: boolean;
|
|
114
114
|
output?: string;
|
|
115
115
|
};
|
|
116
|
+
export type ModelEndData = StreamEventData & {
|
|
117
|
+
output: AIMessageChunk | undefined;
|
|
118
|
+
} | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@librechat/agents",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.2",
|
|
4
4
|
"main": "./dist/cjs/main.cjs",
|
|
5
5
|
"module": "./dist/esm/main.mjs",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
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
43
|
"content": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/content.ts --provider 'anthropic' --name 'Jo' --location 'New York, NY'",
|
|
44
44
|
"stream": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/stream.ts --provider 'anthropic' --name 'Jo' --location 'New York, NY'",
|
|
45
|
-
"simple": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/simple.ts --provider '
|
|
45
|
+
"simple": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/simple.ts --provider 'bedrock' --name 'Jo' --location 'New York, NY'",
|
|
46
46
|
"tool-test": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/tools.ts --provider 'anthropic' --name 'Jo' --location 'New York, NY'",
|
|
47
47
|
"abort": "node -r dotenv/config --loader ./tsconfig-paths-bootstrap.mjs --experimental-specifier-resolution=node ./src/scripts/abort.ts --provider 'anthropic' --name 'Jo' --location 'New York, NY'",
|
|
48
48
|
"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'",
|
package/src/events.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
2
|
// src/events.ts
|
|
3
|
-
import type { AIMessage } from '@langchain/core/messages';
|
|
4
3
|
import type { Graph } from '@/graphs';
|
|
5
4
|
import type * as t from '@/types';
|
|
6
5
|
|
|
@@ -17,19 +16,13 @@ export class HandlerRegistry {
|
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
export class ModelEndHandler implements t.EventHandler {
|
|
20
|
-
handle(event: string, data: t.
|
|
19
|
+
handle(event: string, data: t.ModelEndData, metadata?: Record<string, unknown>, graph?: Graph): void {
|
|
21
20
|
if (!graph || !metadata) {
|
|
22
21
|
console.warn(`Graph or metadata not found in ${event} event`);
|
|
23
22
|
return;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
|
|
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);
|
|
25
|
+
const usage = data?.output?.usage_metadata;
|
|
33
26
|
|
|
34
27
|
console.log(`====== ${event.toUpperCase()} ======`);
|
|
35
28
|
console.dir({
|
|
@@ -39,7 +32,7 @@ export class ModelEndHandler implements t.EventHandler {
|
|
|
39
32
|
}
|
|
40
33
|
|
|
41
34
|
export class ToolEndHandler implements t.EventHandler {
|
|
42
|
-
handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void {
|
|
35
|
+
handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>, graph?: Graph): void {
|
|
43
36
|
if (!graph || !metadata) {
|
|
44
37
|
console.warn(`Graph or metadata not found in ${event} event`);
|
|
45
38
|
return;
|
|
@@ -55,10 +48,10 @@ export class ToolEndHandler implements t.EventHandler {
|
|
|
55
48
|
}
|
|
56
49
|
|
|
57
50
|
export class TestLLMStreamHandler implements t.EventHandler {
|
|
58
|
-
handle(event: string, data: t.StreamEventData): void {
|
|
51
|
+
handle(event: string, data: t.StreamEventData | undefined): void {
|
|
59
52
|
const chunk = data?.chunk;
|
|
60
53
|
const isMessageChunk = !!(chunk && 'message' in chunk);
|
|
61
|
-
const msg = isMessageChunk && chunk
|
|
54
|
+
const msg = isMessageChunk && chunk.message;
|
|
62
55
|
if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {
|
|
63
56
|
console.log(msg.tool_call_chunks);
|
|
64
57
|
} else if (msg && msg.content) {
|
|
@@ -70,10 +63,10 @@ export class TestLLMStreamHandler implements t.EventHandler {
|
|
|
70
63
|
}
|
|
71
64
|
|
|
72
65
|
export class TestChatStreamHandler implements t.EventHandler {
|
|
73
|
-
handle(event: string, data: t.StreamEventData): void {
|
|
66
|
+
handle(event: string, data: t.StreamEventData | undefined): void {
|
|
74
67
|
const chunk = data?.chunk;
|
|
75
68
|
const isContentChunk = !!(chunk && 'content' in chunk);
|
|
76
|
-
const content = isContentChunk && chunk
|
|
69
|
+
const content = isContentChunk && chunk.content;
|
|
77
70
|
|
|
78
71
|
if (!content || !isContentChunk) {
|
|
79
72
|
return;
|
|
@@ -92,10 +85,10 @@ export class TestChatStreamHandler implements t.EventHandler {
|
|
|
92
85
|
}
|
|
93
86
|
|
|
94
87
|
export class LLMStreamHandler implements t.EventHandler {
|
|
95
|
-
handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void {
|
|
88
|
+
handle(event: string, data: t.StreamEventData | undefined, metadata?: Record<string, unknown>): void {
|
|
96
89
|
const chunk = data?.chunk;
|
|
97
90
|
const isMessageChunk = !!(chunk && 'message' in chunk);
|
|
98
|
-
const msg = isMessageChunk && chunk
|
|
91
|
+
const msg = isMessageChunk && chunk.message;
|
|
99
92
|
if (metadata) { console.log(metadata); }
|
|
100
93
|
if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {
|
|
101
94
|
console.log(msg.tool_call_chunks);
|
package/src/scripts/simple.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { HumanMessage, BaseMessage } from '@langchain/core/messages';
|
|
|
5
5
|
import { TavilySearchResults } from '@langchain/community/tools/tavily_search';
|
|
6
6
|
import type * as t from '@/types';
|
|
7
7
|
import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
|
|
8
|
-
import { ToolEndHandler, createMetadataAggregator } from '@/events';
|
|
8
|
+
import { ToolEndHandler, ModelEndHandler, createMetadataAggregator } from '@/events';
|
|
9
9
|
import { getLLMConfig } from '@/utils/llmConfig';
|
|
10
10
|
import { getArgs } from '@/scripts/args';
|
|
11
11
|
import { GraphEvents } from '@/common';
|
|
@@ -18,7 +18,7 @@ async function testStandardStreaming(): Promise<void> {
|
|
|
18
18
|
const { contentParts, aggregateContent } = createContentAggregator();
|
|
19
19
|
const customHandlers = {
|
|
20
20
|
[GraphEvents.TOOL_END]: new ToolEndHandler(),
|
|
21
|
-
|
|
21
|
+
[GraphEvents.CHAT_MODEL_END]: new ModelEndHandler(),
|
|
22
22
|
[GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
|
|
23
23
|
[GraphEvents.ON_RUN_STEP_COMPLETED]: {
|
|
24
24
|
handle: (event: GraphEvents.ON_RUN_STEP_COMPLETED, data: t.StreamEventData): void => {
|
package/src/types/graph.ts
CHANGED
|
@@ -19,7 +19,7 @@ export type IState = BaseGraphState;
|
|
|
19
19
|
// }
|
|
20
20
|
|
|
21
21
|
export interface EventHandler {
|
|
22
|
-
handle(event: string, data: StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void;
|
|
22
|
+
handle(event: string, data: StreamEventData | ModelEndData, metadata?: Record<string, unknown>, graph?: Graph): void;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export type GraphStateChannels<T extends BaseGraphState> = StateGraphArgs<T>['channels'];
|
|
@@ -70,6 +70,7 @@ export type StreamEventData = {
|
|
|
70
70
|
*/
|
|
71
71
|
result?: unknown;
|
|
72
72
|
};
|
|
73
|
+
|
|
73
74
|
/**
|
|
74
75
|
* A streaming event.
|
|
75
76
|
*
|
|
@@ -131,4 +132,6 @@ export type PartMetadata = {
|
|
|
131
132
|
status?: string;
|
|
132
133
|
action?: boolean;
|
|
133
134
|
output?: string;
|
|
134
|
-
};
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export type ModelEndData = StreamEventData & { output: AIMessageChunk | undefined } | undefined;
|