@langgraph-js/sdk 1.11.0 → 1.12.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.
- package/dist/LangGraphClient.d.ts +5 -0
- package/dist/LangGraphClient.js +52 -1
- package/dist/TestKit.d.ts +3 -0
- package/package.json +1 -1
- package/src/LangGraphClient.ts +51 -1
|
@@ -35,6 +35,7 @@ export type RenderMessage = Message & {
|
|
|
35
35
|
};
|
|
36
36
|
}[];
|
|
37
37
|
};
|
|
38
|
+
sub_agent_messages?: RenderMessage[];
|
|
38
39
|
usage_metadata?: {
|
|
39
40
|
total_tokens: number;
|
|
40
41
|
input_tokens: number;
|
|
@@ -91,6 +92,8 @@ export declare class LangGraphClient extends Client {
|
|
|
91
92
|
private streamingCallbacks;
|
|
92
93
|
tools: ToolManager;
|
|
93
94
|
stopController: AbortController | null;
|
|
95
|
+
/** 用于存储 subAgent 状态数据的键 */
|
|
96
|
+
subAgentsKey: string;
|
|
94
97
|
constructor(config: LangGraphClientConfig);
|
|
95
98
|
availableAssistants: Assistant[];
|
|
96
99
|
private listAssistants;
|
|
@@ -130,6 +133,8 @@ export declare class LangGraphClient extends Client {
|
|
|
130
133
|
* @en Messages used for streaming rendering in the UI.
|
|
131
134
|
*/
|
|
132
135
|
get renderMessage(): RenderMessage[];
|
|
136
|
+
/** 转换 subAgent 消息为工具的子消息 */
|
|
137
|
+
private convertSubAgentMessages;
|
|
133
138
|
/**
|
|
134
139
|
* @zh 为消息附加额外的信息,如耗时、唯一 ID 等。
|
|
135
140
|
* @en Attaches additional information to messages, such as spend time, unique ID, etc.
|
package/dist/LangGraphClient.js
CHANGED
|
@@ -32,6 +32,8 @@ export class LangGraphClient extends Client {
|
|
|
32
32
|
this.streamingCallbacks = new Set();
|
|
33
33
|
this.tools = new ToolManager();
|
|
34
34
|
this.stopController = null;
|
|
35
|
+
/** 用于存储 subAgent 状态数据的键 */
|
|
36
|
+
this.subAgentsKey = "task_store";
|
|
35
37
|
this.availableAssistants = [];
|
|
36
38
|
this.streamingMessage = [];
|
|
37
39
|
/** 图发过来的更新信息 */
|
|
@@ -225,7 +227,56 @@ export class LangGraphClient extends Client {
|
|
|
225
227
|
result.unshift(message);
|
|
226
228
|
}
|
|
227
229
|
}
|
|
228
|
-
return this.attachInfoForMessage(this.composeToolMessages(result));
|
|
230
|
+
return this.convertSubAgentMessages(this.attachInfoForMessage(this.composeToolMessages(result)));
|
|
231
|
+
}
|
|
232
|
+
/** 转换 subAgent 消息为工具的子消息 */
|
|
233
|
+
convertSubAgentMessages(messages) {
|
|
234
|
+
const origin_task_store = this.graphState[this.subAgentsKey];
|
|
235
|
+
if (!origin_task_store)
|
|
236
|
+
return messages;
|
|
237
|
+
const task_store = JSON.parse(JSON.stringify(origin_task_store));
|
|
238
|
+
console.log(messages);
|
|
239
|
+
/** 获取 subAgent 消息的 id,用于流式过程中对数据进行标记 */
|
|
240
|
+
messages
|
|
241
|
+
.filter((i) => {
|
|
242
|
+
var _a;
|
|
243
|
+
return (_a = i.node_name) === null || _a === void 0 ? void 0 : _a.startsWith("subagent_");
|
|
244
|
+
})
|
|
245
|
+
.forEach((i) => {
|
|
246
|
+
const tool_call_id = i.node_name.replace("subagent_", "");
|
|
247
|
+
const store = task_store[tool_call_id];
|
|
248
|
+
if (store) {
|
|
249
|
+
// 根据 id 进行去重
|
|
250
|
+
const exists = store.messages.some((msg) => msg.id === i.id);
|
|
251
|
+
if (!exists) {
|
|
252
|
+
store.messages.push(i);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
task_store[tool_call_id] = {
|
|
257
|
+
messages: [i],
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
const ignoreIds = new Set();
|
|
262
|
+
Object.values(task_store).forEach((task) => {
|
|
263
|
+
task.messages.forEach((message) => {
|
|
264
|
+
ignoreIds.add(message.id);
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
const result = [];
|
|
268
|
+
for (const message of messages) {
|
|
269
|
+
if (message.type === "tool" && message.tool_call_id) {
|
|
270
|
+
const task = task_store[message.tool_call_id];
|
|
271
|
+
if (task) {
|
|
272
|
+
message.sub_agent_messages = this.attachInfoForMessage(this.composeToolMessages(task.messages));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (message.id && ignoreIds.has(message.id))
|
|
276
|
+
continue;
|
|
277
|
+
result.push(message);
|
|
278
|
+
}
|
|
279
|
+
return result;
|
|
229
280
|
}
|
|
230
281
|
/**
|
|
231
282
|
* @zh 为消息附加额外的信息,如耗时、唯一 ID 等。
|
package/dist/TestKit.d.ts
CHANGED
|
@@ -158,6 +158,7 @@ export declare class TestLangGraphChat {
|
|
|
158
158
|
};
|
|
159
159
|
}[];
|
|
160
160
|
};
|
|
161
|
+
sub_agent_messages?: RenderMessage[];
|
|
161
162
|
usage_metadata?: {
|
|
162
163
|
total_tokens: number;
|
|
163
164
|
input_tokens: number;
|
|
@@ -182,6 +183,7 @@ export declare class TestLangGraphChat {
|
|
|
182
183
|
};
|
|
183
184
|
}[];
|
|
184
185
|
};
|
|
186
|
+
sub_agent_messages?: RenderMessage[];
|
|
185
187
|
usage_metadata?: {
|
|
186
188
|
total_tokens: number;
|
|
187
189
|
input_tokens: number;
|
|
@@ -206,6 +208,7 @@ export declare class TestLangGraphChat {
|
|
|
206
208
|
};
|
|
207
209
|
}[];
|
|
208
210
|
};
|
|
211
|
+
sub_agent_messages?: RenderMessage[];
|
|
209
212
|
usage_metadata?: {
|
|
210
213
|
total_tokens: number;
|
|
211
214
|
input_tokens: number;
|
package/package.json
CHANGED
package/src/LangGraphClient.ts
CHANGED
|
@@ -35,6 +35,7 @@ export type RenderMessage = Message & {
|
|
|
35
35
|
};
|
|
36
36
|
}[];
|
|
37
37
|
};
|
|
38
|
+
sub_agent_messages?: RenderMessage[];
|
|
38
39
|
usage_metadata?: {
|
|
39
40
|
total_tokens: number;
|
|
40
41
|
input_tokens: number;
|
|
@@ -102,6 +103,8 @@ export class LangGraphClient extends Client {
|
|
|
102
103
|
private streamingCallbacks: Set<StreamingUpdateCallback> = new Set();
|
|
103
104
|
tools: ToolManager = new ToolManager();
|
|
104
105
|
stopController: AbortController | null = null;
|
|
106
|
+
/** 用于存储 subAgent 状态数据的键 */
|
|
107
|
+
subAgentsKey = "task_store";
|
|
105
108
|
|
|
106
109
|
constructor(config: LangGraphClientConfig) {
|
|
107
110
|
super(config);
|
|
@@ -296,7 +299,54 @@ export class LangGraphClient extends Client {
|
|
|
296
299
|
}
|
|
297
300
|
}
|
|
298
301
|
|
|
299
|
-
return this.attachInfoForMessage(this.composeToolMessages(result as RenderMessage[]));
|
|
302
|
+
return this.convertSubAgentMessages(this.attachInfoForMessage(this.composeToolMessages(result as RenderMessage[])));
|
|
303
|
+
}
|
|
304
|
+
/** 转换 subAgent 消息为工具的子消息 */
|
|
305
|
+
private convertSubAgentMessages(messages: RenderMessage[]) {
|
|
306
|
+
const origin_task_store = this.graphState[this.subAgentsKey];
|
|
307
|
+
if (!origin_task_store) return messages;
|
|
308
|
+
|
|
309
|
+
const task_store = JSON.parse(JSON.stringify(origin_task_store));
|
|
310
|
+
console.log(messages);
|
|
311
|
+
/** 获取 subAgent 消息的 id,用于流式过程中对数据进行标记 */
|
|
312
|
+
messages
|
|
313
|
+
.filter((i) => {
|
|
314
|
+
return i.node_name?.startsWith("subagent_");
|
|
315
|
+
})
|
|
316
|
+
.forEach((i) => {
|
|
317
|
+
const tool_call_id = i.node_name!.replace("subagent_", "");
|
|
318
|
+
const store = task_store[tool_call_id];
|
|
319
|
+
if (store) {
|
|
320
|
+
// 根据 id 进行去重
|
|
321
|
+
const exists = (store.messages as RenderMessage[]).some((msg) => msg.id === i.id);
|
|
322
|
+
if (!exists) {
|
|
323
|
+
(store.messages as RenderMessage[]).push(i);
|
|
324
|
+
}
|
|
325
|
+
} else {
|
|
326
|
+
task_store[tool_call_id] = {
|
|
327
|
+
messages: [i],
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
const ignoreIds = new Set<string>();
|
|
333
|
+
Object.values(task_store).forEach((task: any) => {
|
|
334
|
+
task.messages.forEach((message: RenderMessage) => {
|
|
335
|
+
ignoreIds.add(message.id!);
|
|
336
|
+
});
|
|
337
|
+
});
|
|
338
|
+
const result: RenderMessage[] = [];
|
|
339
|
+
for (const message of messages) {
|
|
340
|
+
if (message.type === "tool" && message.tool_call_id) {
|
|
341
|
+
const task = task_store[message.tool_call_id];
|
|
342
|
+
if (task) {
|
|
343
|
+
message.sub_agent_messages = this.attachInfoForMessage(this.composeToolMessages(task.messages));
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (message.id && ignoreIds.has(message.id)) continue;
|
|
347
|
+
result.push(message);
|
|
348
|
+
}
|
|
349
|
+
return result;
|
|
300
350
|
}
|
|
301
351
|
/**
|
|
302
352
|
* @zh 为消息附加额外的信息,如耗时、唯一 ID 等。
|