@langchain/core 0.2.18 → 0.2.19
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/callbacks/manager.cjs +94 -19
- package/dist/callbacks/manager.d.ts +3 -1
- package/dist/callbacks/manager.js +94 -19
- package/dist/messages/base.cjs +16 -1
- package/dist/messages/base.d.ts +9 -0
- package/dist/messages/base.js +14 -0
- package/dist/messages/tool.cjs +23 -0
- package/dist/messages/tool.d.ts +15 -0
- package/dist/messages/tool.js +24 -1
- package/dist/messages/utils.cjs +1 -1
- package/dist/messages/utils.js +1 -1
- package/dist/output_parsers/string.cjs +1 -0
- package/dist/output_parsers/string.js +1 -0
- package/dist/runnables/base.cjs +1 -3
- package/dist/runnables/base.js +1 -3
- package/dist/runnables/remote.cjs +3 -1
- package/dist/runnables/remote.js +3 -1
- package/dist/tools/index.cjs +15 -6
- package/dist/tools/index.d.ts +21 -12
- package/dist/tools/index.js +15 -6
- package/dist/utils/testing/index.cjs +161 -3
- package/dist/utils/testing/index.d.ts +94 -3
- package/dist/utils/testing/index.js +160 -3
- package/package.json +4 -3
- package/dist/caches/tests/in_memory_cache.test.d.ts +0 -1
- package/dist/caches/tests/in_memory_cache.test.js +0 -33
- package/dist/callbacks/tests/callbacks.test.d.ts +0 -1
- package/dist/callbacks/tests/callbacks.test.js +0 -495
- package/dist/callbacks/tests/manager.int.test.d.ts +0 -1
- package/dist/callbacks/tests/manager.int.test.js +0 -29
- package/dist/callbacks/tests/run_collector.test.d.ts +0 -1
- package/dist/callbacks/tests/run_collector.test.js +0 -58
- package/dist/language_models/tests/chat_models.test.d.ts +0 -1
- package/dist/language_models/tests/chat_models.test.js +0 -204
- package/dist/language_models/tests/count_tokens.test.d.ts +0 -1
- package/dist/language_models/tests/count_tokens.test.js +0 -19
- package/dist/language_models/tests/llms.test.d.ts +0 -1
- package/dist/language_models/tests/llms.test.js +0 -52
- package/dist/messages/tests/base_message.test.d.ts +0 -1
- package/dist/messages/tests/base_message.test.js +0 -245
- package/dist/messages/tests/message_utils.test.d.ts +0 -1
- package/dist/messages/tests/message_utils.test.js +0 -434
- package/dist/output_parsers/openai_tools/tests/json_output_tools_parser.test.d.ts +0 -1
- package/dist/output_parsers/openai_tools/tests/json_output_tools_parser.test.js +0 -81
- package/dist/output_parsers/tests/json.test.d.ts +0 -1
- package/dist/output_parsers/tests/json.test.js +0 -427
- package/dist/output_parsers/tests/output_parser.test.d.ts +0 -1
- package/dist/output_parsers/tests/output_parser.test.js +0 -78
- package/dist/output_parsers/tests/string.test.d.ts +0 -1
- package/dist/output_parsers/tests/string.test.js +0 -68
- package/dist/output_parsers/tests/structured.test.d.ts +0 -1
- package/dist/output_parsers/tests/structured.test.js +0 -166
- package/dist/output_parsers/tests/xml.test.d.ts +0 -1
- package/dist/output_parsers/tests/xml.test.js +0 -81
- package/dist/prompts/tests/chat.mustache.test.d.ts +0 -1
- package/dist/prompts/tests/chat.mustache.test.js +0 -129
- package/dist/prompts/tests/chat.test.d.ts +0 -1
- package/dist/prompts/tests/chat.test.js +0 -557
- package/dist/prompts/tests/few_shot.test.d.ts +0 -1
- package/dist/prompts/tests/few_shot.test.js +0 -224
- package/dist/prompts/tests/pipeline.test.d.ts +0 -1
- package/dist/prompts/tests/pipeline.test.js +0 -101
- package/dist/prompts/tests/prompt.mustache.test.d.ts +0 -1
- package/dist/prompts/tests/prompt.mustache.test.js +0 -105
- package/dist/prompts/tests/prompt.test.d.ts +0 -1
- package/dist/prompts/tests/prompt.test.js +0 -78
- package/dist/prompts/tests/structured.test.d.ts +0 -1
- package/dist/prompts/tests/structured.test.js +0 -37
- package/dist/prompts/tests/template.test.d.ts +0 -1
- package/dist/prompts/tests/template.test.js +0 -24
- package/dist/runnables/tests/runnable.test.d.ts +0 -1
- package/dist/runnables/tests/runnable.test.js +0 -491
- package/dist/runnables/tests/runnable_binding.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_binding.test.js +0 -46
- package/dist/runnables/tests/runnable_branch.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_branch.test.js +0 -116
- package/dist/runnables/tests/runnable_graph.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_graph.test.js +0 -100
- package/dist/runnables/tests/runnable_history.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_history.test.js +0 -177
- package/dist/runnables/tests/runnable_interface.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_interface.test.js +0 -209
- package/dist/runnables/tests/runnable_map.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_map.test.js +0 -238
- package/dist/runnables/tests/runnable_passthrough.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_passthrough.test.js +0 -96
- package/dist/runnables/tests/runnable_remote.int.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_remote.int.test.js +0 -138
- package/dist/runnables/tests/runnable_remote.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_remote.test.js +0 -200
- package/dist/runnables/tests/runnable_retry.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_retry.test.js +0 -125
- package/dist/runnables/tests/runnable_stream_events.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_stream_events.test.js +0 -1013
- package/dist/runnables/tests/runnable_stream_events_v2.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_stream_events_v2.test.js +0 -2022
- package/dist/runnables/tests/runnable_stream_log.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_stream_log.test.js +0 -71
- package/dist/runnables/tests/runnable_tools.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_tools.test.js +0 -149
- package/dist/runnables/tests/runnable_tracing.int.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_tracing.int.test.js +0 -37
- package/dist/runnables/tests/runnable_with_fallbacks.test.d.ts +0 -1
- package/dist/runnables/tests/runnable_with_fallbacks.test.js +0 -36
- package/dist/singletons/tests/async_local_storage.test.d.ts +0 -1
- package/dist/singletons/tests/async_local_storage.test.js +0 -153
- package/dist/structured_query/tests/utils.test.d.ts +0 -1
- package/dist/structured_query/tests/utils.test.js +0 -47
- package/dist/tools/tests/tools.test.d.ts +0 -1
- package/dist/tools/tests/tools.test.js +0 -85
- package/dist/tracers/tests/langchain_tracer.int.test.d.ts +0 -1
- package/dist/tracers/tests/langchain_tracer.int.test.js +0 -74
- package/dist/tracers/tests/langsmith_interop.test.d.ts +0 -1
- package/dist/tracers/tests/langsmith_interop.test.js +0 -551
- package/dist/tracers/tests/tracer.test.d.ts +0 -1
- package/dist/tracers/tests/tracer.test.js +0 -378
- package/dist/utils/testing/tests/chatfake.test.d.ts +0 -1
- package/dist/utils/testing/tests/chatfake.test.js +0 -112
- package/dist/utils/tests/async_caller.test.d.ts +0 -1
- package/dist/utils/tests/async_caller.test.js +0 -27
- package/dist/utils/tests/enviroment.test.d.ts +0 -1
- package/dist/utils/tests/enviroment.test.js +0 -6
- package/dist/utils/tests/function_calling.test.d.ts +0 -1
- package/dist/utils/tests/function_calling.test.js +0 -107
- package/dist/utils/tests/math_utils.test.d.ts +0 -1
- package/dist/utils/tests/math_utils.test.js +0 -139
- package/dist/utils/tests/polyfill_stream.test.d.ts +0 -1
- package/dist/utils/tests/polyfill_stream.test.js +0 -15
|
@@ -1,495 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-promise-executor-return */
|
|
2
|
-
import { test, expect } from "@jest/globals";
|
|
3
|
-
import * as uuid from "uuid";
|
|
4
|
-
import { CallbackManager } from "../manager.js";
|
|
5
|
-
import { BaseCallbackHandler } from "../base.js";
|
|
6
|
-
import { Document } from "../../documents/document.js";
|
|
7
|
-
import { HumanMessage } from "../../messages/index.js";
|
|
8
|
-
class FakeCallbackHandler extends BaseCallbackHandler {
|
|
9
|
-
constructor(inputs) {
|
|
10
|
-
super(inputs);
|
|
11
|
-
Object.defineProperty(this, "name", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
configurable: true,
|
|
14
|
-
writable: true,
|
|
15
|
-
value: `fake-${uuid.v4()}`
|
|
16
|
-
});
|
|
17
|
-
Object.defineProperty(this, "starts", {
|
|
18
|
-
enumerable: true,
|
|
19
|
-
configurable: true,
|
|
20
|
-
writable: true,
|
|
21
|
-
value: 0
|
|
22
|
-
});
|
|
23
|
-
Object.defineProperty(this, "ends", {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
configurable: true,
|
|
26
|
-
writable: true,
|
|
27
|
-
value: 0
|
|
28
|
-
});
|
|
29
|
-
Object.defineProperty(this, "errors", {
|
|
30
|
-
enumerable: true,
|
|
31
|
-
configurable: true,
|
|
32
|
-
writable: true,
|
|
33
|
-
value: 0
|
|
34
|
-
});
|
|
35
|
-
Object.defineProperty(this, "chainStarts", {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true,
|
|
39
|
-
value: 0
|
|
40
|
-
});
|
|
41
|
-
Object.defineProperty(this, "chainEnds", {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
configurable: true,
|
|
44
|
-
writable: true,
|
|
45
|
-
value: 0
|
|
46
|
-
});
|
|
47
|
-
Object.defineProperty(this, "llmStarts", {
|
|
48
|
-
enumerable: true,
|
|
49
|
-
configurable: true,
|
|
50
|
-
writable: true,
|
|
51
|
-
value: 0
|
|
52
|
-
});
|
|
53
|
-
Object.defineProperty(this, "llmEnds", {
|
|
54
|
-
enumerable: true,
|
|
55
|
-
configurable: true,
|
|
56
|
-
writable: true,
|
|
57
|
-
value: 0
|
|
58
|
-
});
|
|
59
|
-
Object.defineProperty(this, "llmStreams", {
|
|
60
|
-
enumerable: true,
|
|
61
|
-
configurable: true,
|
|
62
|
-
writable: true,
|
|
63
|
-
value: 0
|
|
64
|
-
});
|
|
65
|
-
Object.defineProperty(this, "toolStarts", {
|
|
66
|
-
enumerable: true,
|
|
67
|
-
configurable: true,
|
|
68
|
-
writable: true,
|
|
69
|
-
value: 0
|
|
70
|
-
});
|
|
71
|
-
Object.defineProperty(this, "toolEnds", {
|
|
72
|
-
enumerable: true,
|
|
73
|
-
configurable: true,
|
|
74
|
-
writable: true,
|
|
75
|
-
value: 0
|
|
76
|
-
});
|
|
77
|
-
Object.defineProperty(this, "agentEnds", {
|
|
78
|
-
enumerable: true,
|
|
79
|
-
configurable: true,
|
|
80
|
-
writable: true,
|
|
81
|
-
value: 0
|
|
82
|
-
});
|
|
83
|
-
Object.defineProperty(this, "retrieverStarts", {
|
|
84
|
-
enumerable: true,
|
|
85
|
-
configurable: true,
|
|
86
|
-
writable: true,
|
|
87
|
-
value: 0
|
|
88
|
-
});
|
|
89
|
-
Object.defineProperty(this, "retrieverEnds", {
|
|
90
|
-
enumerable: true,
|
|
91
|
-
configurable: true,
|
|
92
|
-
writable: true,
|
|
93
|
-
value: 0
|
|
94
|
-
});
|
|
95
|
-
Object.defineProperty(this, "texts", {
|
|
96
|
-
enumerable: true,
|
|
97
|
-
configurable: true,
|
|
98
|
-
writable: true,
|
|
99
|
-
value: 0
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
async handleLLMStart(_llm, _prompts) {
|
|
103
|
-
this.starts += 1;
|
|
104
|
-
this.llmStarts += 1;
|
|
105
|
-
}
|
|
106
|
-
async handleLLMEnd(_output) {
|
|
107
|
-
this.ends += 1;
|
|
108
|
-
this.llmEnds += 1;
|
|
109
|
-
}
|
|
110
|
-
async handleLLMNewToken(_token) {
|
|
111
|
-
this.llmStreams += 1;
|
|
112
|
-
}
|
|
113
|
-
async handleLLMError(_err) {
|
|
114
|
-
this.errors += 1;
|
|
115
|
-
}
|
|
116
|
-
async handleChainStart(_chain, _inputs) {
|
|
117
|
-
this.starts += 1;
|
|
118
|
-
this.chainStarts += 1;
|
|
119
|
-
}
|
|
120
|
-
async handleChainEnd(_outputs) {
|
|
121
|
-
this.ends += 1;
|
|
122
|
-
this.chainEnds += 1;
|
|
123
|
-
}
|
|
124
|
-
async handleChainError(_err) {
|
|
125
|
-
this.errors += 1;
|
|
126
|
-
}
|
|
127
|
-
async handleToolStart(_tool, _input) {
|
|
128
|
-
this.starts += 1;
|
|
129
|
-
this.toolStarts += 1;
|
|
130
|
-
}
|
|
131
|
-
async handleToolEnd(_output) {
|
|
132
|
-
this.ends += 1;
|
|
133
|
-
this.toolEnds += 1;
|
|
134
|
-
}
|
|
135
|
-
async handleToolError(_err) {
|
|
136
|
-
this.errors += 1;
|
|
137
|
-
}
|
|
138
|
-
async handleText(_text) {
|
|
139
|
-
this.texts += 1;
|
|
140
|
-
}
|
|
141
|
-
async handleAgentAction(_action) {
|
|
142
|
-
this.starts += 1;
|
|
143
|
-
this.toolStarts += 1;
|
|
144
|
-
}
|
|
145
|
-
async handleAgentEnd(_action) {
|
|
146
|
-
this.ends += 1;
|
|
147
|
-
this.agentEnds += 1;
|
|
148
|
-
}
|
|
149
|
-
async handleRetrieverStart(_retriever, _query) {
|
|
150
|
-
this.starts += 1;
|
|
151
|
-
this.retrieverStarts += 1;
|
|
152
|
-
}
|
|
153
|
-
async handleRetrieverEnd(_documents) {
|
|
154
|
-
this.ends += 1;
|
|
155
|
-
this.retrieverEnds += 1;
|
|
156
|
-
}
|
|
157
|
-
async handleRetrieverError(_err) {
|
|
158
|
-
this.errors += 1;
|
|
159
|
-
}
|
|
160
|
-
copy() {
|
|
161
|
-
const newInstance = new FakeCallbackHandler();
|
|
162
|
-
newInstance.name = this.name;
|
|
163
|
-
newInstance.starts = this.starts;
|
|
164
|
-
newInstance.ends = this.ends;
|
|
165
|
-
newInstance.errors = this.errors;
|
|
166
|
-
newInstance.chainStarts = this.chainStarts;
|
|
167
|
-
newInstance.chainEnds = this.chainEnds;
|
|
168
|
-
newInstance.llmStarts = this.llmStarts;
|
|
169
|
-
newInstance.llmEnds = this.llmEnds;
|
|
170
|
-
newInstance.llmStreams = this.llmStreams;
|
|
171
|
-
newInstance.toolStarts = this.toolStarts;
|
|
172
|
-
newInstance.toolEnds = this.toolEnds;
|
|
173
|
-
newInstance.agentEnds = this.agentEnds;
|
|
174
|
-
newInstance.retrieverStarts = this.retrieverStarts;
|
|
175
|
-
newInstance.retrieverEnds = this.retrieverEnds;
|
|
176
|
-
newInstance.texts = this.texts;
|
|
177
|
-
return newInstance;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
class FakeCallbackHandlerWithChatStart extends FakeCallbackHandler {
|
|
181
|
-
constructor() {
|
|
182
|
-
super(...arguments);
|
|
183
|
-
Object.defineProperty(this, "chatModelStarts", {
|
|
184
|
-
enumerable: true,
|
|
185
|
-
configurable: true,
|
|
186
|
-
writable: true,
|
|
187
|
-
value: 0
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
async handleChatModelStart(_llm, _messages) {
|
|
191
|
-
this.starts += 1;
|
|
192
|
-
this.chatModelStarts += 1;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
const serialized = {
|
|
196
|
-
lc: 1,
|
|
197
|
-
type: "constructor",
|
|
198
|
-
id: ["test"],
|
|
199
|
-
kwargs: {},
|
|
200
|
-
};
|
|
201
|
-
test("CallbackManager", async () => {
|
|
202
|
-
const manager = new CallbackManager();
|
|
203
|
-
const handler1 = new FakeCallbackHandler();
|
|
204
|
-
const handler2 = new FakeCallbackHandler();
|
|
205
|
-
manager.addHandler(handler1);
|
|
206
|
-
manager.addHandler(handler2);
|
|
207
|
-
const llmCbs = await manager.handleLLMStart(serialized, ["test"]);
|
|
208
|
-
await Promise.all(llmCbs.map(async (llmCb) => {
|
|
209
|
-
await llmCb.handleLLMEnd({ generations: [] });
|
|
210
|
-
await llmCb.handleLLMNewToken("test");
|
|
211
|
-
await llmCb.handleLLMError(new Error("test"));
|
|
212
|
-
}));
|
|
213
|
-
const chainCb = await manager.handleChainStart(serialized, { test: "test" });
|
|
214
|
-
await chainCb.handleChainEnd({ test: "test" });
|
|
215
|
-
await chainCb.handleChainError(new Error("test"));
|
|
216
|
-
const toolCb = await manager.handleToolStart(serialized, "test");
|
|
217
|
-
await toolCb.handleToolEnd("test");
|
|
218
|
-
await toolCb.handleToolError(new Error("test"));
|
|
219
|
-
await chainCb.handleText("test");
|
|
220
|
-
await chainCb.handleAgentAction({
|
|
221
|
-
tool: "test",
|
|
222
|
-
toolInput: "test",
|
|
223
|
-
log: "test",
|
|
224
|
-
});
|
|
225
|
-
await chainCb.handleAgentEnd({ returnValues: { test: "test" }, log: "test" });
|
|
226
|
-
const retrieverCb = await manager.handleRetrieverStart(serialized, "test");
|
|
227
|
-
await retrieverCb.handleRetrieverEnd([
|
|
228
|
-
new Document({ pageContent: "test", metadata: { test: "test" } }),
|
|
229
|
-
]);
|
|
230
|
-
await retrieverCb.handleRetrieverError(new Error("test"));
|
|
231
|
-
// In case background mode is on while running this test
|
|
232
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
233
|
-
for (const handler of [handler1, handler2]) {
|
|
234
|
-
expect(handler.starts).toBe(5);
|
|
235
|
-
expect(handler.ends).toBe(5);
|
|
236
|
-
expect(handler.errors).toBe(4);
|
|
237
|
-
expect(handler.retrieverStarts).toBe(1);
|
|
238
|
-
expect(handler.retrieverEnds).toBe(1);
|
|
239
|
-
expect(handler.llmStarts).toBe(1);
|
|
240
|
-
expect(handler.llmEnds).toBe(1);
|
|
241
|
-
expect(handler.llmStreams).toBe(1);
|
|
242
|
-
expect(handler.chainStarts).toBe(1);
|
|
243
|
-
expect(handler.chainEnds).toBe(1);
|
|
244
|
-
expect(handler.toolStarts).toBe(2);
|
|
245
|
-
expect(handler.toolEnds).toBe(1);
|
|
246
|
-
expect(handler.agentEnds).toBe(1);
|
|
247
|
-
expect(handler.texts).toBe(1);
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
test("CallbackManager Chat Message Handling", async () => {
|
|
251
|
-
const manager = new CallbackManager();
|
|
252
|
-
const handler1 = new FakeCallbackHandler();
|
|
253
|
-
const handler2 = new FakeCallbackHandlerWithChatStart();
|
|
254
|
-
manager.addHandler(handler1);
|
|
255
|
-
manager.addHandler(handler2);
|
|
256
|
-
const llmCbs = await manager.handleChatModelStart(serialized, [
|
|
257
|
-
[new HumanMessage("test")],
|
|
258
|
-
]);
|
|
259
|
-
await Promise.all(llmCbs.map(async (llmCb) => {
|
|
260
|
-
await llmCb.handleLLMEnd({ generations: [] });
|
|
261
|
-
}));
|
|
262
|
-
// Everything treated as llm in handler 1
|
|
263
|
-
expect(handler1.llmStarts).toBe(1);
|
|
264
|
-
expect(handler2.llmStarts).toBe(0);
|
|
265
|
-
expect(handler2.chatModelStarts).toBe(1);
|
|
266
|
-
// These should all be treated the same
|
|
267
|
-
for (const handler of [handler1, handler2]) {
|
|
268
|
-
expect(handler.starts).toBe(1);
|
|
269
|
-
expect(handler.ends).toBe(1);
|
|
270
|
-
expect(handler.errors).toBe(0);
|
|
271
|
-
expect(handler.llmEnds).toBe(1);
|
|
272
|
-
}
|
|
273
|
-
});
|
|
274
|
-
test("CallbackHandler with ignoreLLM", async () => {
|
|
275
|
-
const handler = new FakeCallbackHandler({
|
|
276
|
-
ignoreLLM: true,
|
|
277
|
-
});
|
|
278
|
-
const manager = new CallbackManager();
|
|
279
|
-
manager.addHandler(handler);
|
|
280
|
-
const llmCbs = await manager.handleLLMStart(serialized, ["test"]);
|
|
281
|
-
await Promise.all(llmCbs.map(async (llmCb) => {
|
|
282
|
-
await llmCb.handleLLMEnd({ generations: [] });
|
|
283
|
-
await llmCb.handleLLMNewToken("test");
|
|
284
|
-
await llmCb.handleLLMError(new Error("test"));
|
|
285
|
-
}));
|
|
286
|
-
expect(handler.starts).toBe(0);
|
|
287
|
-
expect(handler.ends).toBe(0);
|
|
288
|
-
expect(handler.errors).toBe(0);
|
|
289
|
-
expect(handler.llmStarts).toBe(0);
|
|
290
|
-
expect(handler.llmEnds).toBe(0);
|
|
291
|
-
expect(handler.llmStreams).toBe(0);
|
|
292
|
-
});
|
|
293
|
-
test("CallbackHandler with ignoreRetriever", async () => {
|
|
294
|
-
const handler = new FakeCallbackHandler({
|
|
295
|
-
ignoreRetriever: true,
|
|
296
|
-
});
|
|
297
|
-
const manager = new CallbackManager();
|
|
298
|
-
manager.addHandler(handler);
|
|
299
|
-
const retrieverCb = await manager.handleRetrieverStart(serialized, "test");
|
|
300
|
-
await retrieverCb.handleRetrieverEnd([
|
|
301
|
-
new Document({ pageContent: "test", metadata: { test: "test" } }),
|
|
302
|
-
]);
|
|
303
|
-
await retrieverCb.handleRetrieverError(new Error("test"));
|
|
304
|
-
expect(handler.starts).toBe(0);
|
|
305
|
-
expect(handler.ends).toBe(0);
|
|
306
|
-
expect(handler.errors).toBe(0);
|
|
307
|
-
expect(handler.retrieverStarts).toBe(0);
|
|
308
|
-
expect(handler.retrieverEnds).toBe(0);
|
|
309
|
-
});
|
|
310
|
-
test("CallbackHandler with ignoreChain", async () => {
|
|
311
|
-
const handler = new FakeCallbackHandler({
|
|
312
|
-
ignoreChain: true,
|
|
313
|
-
});
|
|
314
|
-
const manager = new CallbackManager();
|
|
315
|
-
manager.addHandler(handler);
|
|
316
|
-
const chainCb = await manager.handleChainStart(serialized, { test: "test" });
|
|
317
|
-
await chainCb.handleChainEnd({ test: "test" });
|
|
318
|
-
await chainCb.handleChainError(new Error("test"));
|
|
319
|
-
expect(handler.starts).toBe(0);
|
|
320
|
-
expect(handler.ends).toBe(0);
|
|
321
|
-
expect(handler.errors).toBe(0);
|
|
322
|
-
expect(handler.chainStarts).toBe(0);
|
|
323
|
-
expect(handler.chainEnds).toBe(0);
|
|
324
|
-
});
|
|
325
|
-
test("CallbackHandler with ignoreAgent", async () => {
|
|
326
|
-
const handler = new FakeCallbackHandler({
|
|
327
|
-
ignoreAgent: true,
|
|
328
|
-
});
|
|
329
|
-
const manager = new CallbackManager();
|
|
330
|
-
manager.addHandler(handler);
|
|
331
|
-
const toolCb = await manager.handleToolStart(serialized, "test");
|
|
332
|
-
await toolCb.handleToolEnd("test");
|
|
333
|
-
await toolCb.handleToolError(new Error("test"));
|
|
334
|
-
const chainCb = await manager.handleChainStart(serialized, {});
|
|
335
|
-
await chainCb.handleAgentAction({
|
|
336
|
-
tool: "test",
|
|
337
|
-
toolInput: "test",
|
|
338
|
-
log: "test",
|
|
339
|
-
});
|
|
340
|
-
await chainCb.handleAgentEnd({ returnValues: { test: "test" }, log: "test" });
|
|
341
|
-
expect(handler.starts).toBe(1);
|
|
342
|
-
expect(handler.ends).toBe(0);
|
|
343
|
-
expect(handler.errors).toBe(0);
|
|
344
|
-
expect(handler.toolStarts).toBe(0);
|
|
345
|
-
expect(handler.toolEnds).toBe(0);
|
|
346
|
-
expect(handler.agentEnds).toBe(0);
|
|
347
|
-
});
|
|
348
|
-
test("CallbackManager with child manager", async () => {
|
|
349
|
-
const chainRunId = "chainRunId";
|
|
350
|
-
let llmWasCalled = false;
|
|
351
|
-
let chainWasCalled = false;
|
|
352
|
-
const manager = CallbackManager.fromHandlers({
|
|
353
|
-
async handleLLMStart(_llm, _prompts, _runId, parentRunId) {
|
|
354
|
-
expect(parentRunId).toBe(chainRunId);
|
|
355
|
-
llmWasCalled = true;
|
|
356
|
-
},
|
|
357
|
-
async handleChainStart(_chain, _inputs, runId, parentRunId) {
|
|
358
|
-
expect(runId).toBe(chainRunId);
|
|
359
|
-
expect(parentRunId).toBe(undefined);
|
|
360
|
-
chainWasCalled = true;
|
|
361
|
-
},
|
|
362
|
-
});
|
|
363
|
-
const chainCb = await manager.handleChainStart(serialized, { test: "test" }, chainRunId);
|
|
364
|
-
await chainCb.getChild().handleLLMStart(serialized, ["test"]);
|
|
365
|
-
expect(llmWasCalled).toBe(true);
|
|
366
|
-
expect(chainWasCalled).toBe(true);
|
|
367
|
-
});
|
|
368
|
-
test("CallbackManager with child manager inherited handlers", async () => {
|
|
369
|
-
const callbackManager1 = new CallbackManager();
|
|
370
|
-
const handler1 = new FakeCallbackHandler();
|
|
371
|
-
const handler2 = new FakeCallbackHandler();
|
|
372
|
-
const handler3 = new FakeCallbackHandler();
|
|
373
|
-
const handler4 = new FakeCallbackHandler();
|
|
374
|
-
callbackManager1.setHandlers([handler1, handler2]);
|
|
375
|
-
expect(callbackManager1.handlers).toEqual([handler1, handler2]);
|
|
376
|
-
expect(callbackManager1.inheritableHandlers).toEqual([handler1, handler2]);
|
|
377
|
-
const callbackManager2 = callbackManager1.copy([handler3, handler4]);
|
|
378
|
-
expect(callbackManager2.handlers).toEqual([
|
|
379
|
-
handler1,
|
|
380
|
-
handler2,
|
|
381
|
-
handler3,
|
|
382
|
-
handler4,
|
|
383
|
-
]);
|
|
384
|
-
expect(callbackManager2.inheritableHandlers).toEqual([
|
|
385
|
-
handler1,
|
|
386
|
-
handler2,
|
|
387
|
-
handler3,
|
|
388
|
-
handler4,
|
|
389
|
-
]);
|
|
390
|
-
const callbackManager3 = callbackManager1.copy([handler3, handler4], false);
|
|
391
|
-
expect(callbackManager3.handlers).toEqual([
|
|
392
|
-
handler1,
|
|
393
|
-
handler2,
|
|
394
|
-
handler3,
|
|
395
|
-
handler4,
|
|
396
|
-
]);
|
|
397
|
-
expect(callbackManager3.inheritableHandlers).toEqual([handler1, handler2]);
|
|
398
|
-
const chainCb = await callbackManager3.handleChainStart(serialized, {
|
|
399
|
-
test: "test",
|
|
400
|
-
});
|
|
401
|
-
const childManager = chainCb.getChild();
|
|
402
|
-
expect(childManager.handlers.map((h) => h.name)).toEqual([
|
|
403
|
-
handler1.name,
|
|
404
|
-
handler2.name,
|
|
405
|
-
]);
|
|
406
|
-
expect(childManager.inheritableHandlers.map((h) => h.name)).toEqual([
|
|
407
|
-
handler1.name,
|
|
408
|
-
handler2.name,
|
|
409
|
-
]);
|
|
410
|
-
const toolCb = await childManager.handleToolStart(serialized, "test");
|
|
411
|
-
const childManager2 = toolCb.getChild();
|
|
412
|
-
expect(childManager2.handlers.map((h) => h.name)).toEqual([
|
|
413
|
-
handler1.name,
|
|
414
|
-
handler2.name,
|
|
415
|
-
]);
|
|
416
|
-
expect(childManager2.inheritableHandlers.map((h) => h.name)).toEqual([
|
|
417
|
-
handler1.name,
|
|
418
|
-
handler2.name,
|
|
419
|
-
]);
|
|
420
|
-
});
|
|
421
|
-
test("CallbackManager.copy()", () => {
|
|
422
|
-
const callbackManager1 = new CallbackManager();
|
|
423
|
-
const handler1 = new FakeCallbackHandler();
|
|
424
|
-
const handler2 = new FakeCallbackHandler();
|
|
425
|
-
const handler3 = new FakeCallbackHandler();
|
|
426
|
-
const handler4 = new FakeCallbackHandler();
|
|
427
|
-
callbackManager1.addHandler(handler1, true);
|
|
428
|
-
callbackManager1.addHandler(handler2, false);
|
|
429
|
-
callbackManager1.addTags(["a"], true);
|
|
430
|
-
callbackManager1.addTags(["b"], false);
|
|
431
|
-
callbackManager1.addMetadata({ a: "a" }, true);
|
|
432
|
-
callbackManager1.addMetadata({ b: "b" }, false);
|
|
433
|
-
expect(callbackManager1.handlers).toEqual([handler1, handler2]);
|
|
434
|
-
expect(callbackManager1.inheritableHandlers).toEqual([handler1]);
|
|
435
|
-
expect(callbackManager1.tags).toEqual(["a", "b"]);
|
|
436
|
-
expect(callbackManager1.inheritableTags).toEqual(["a"]);
|
|
437
|
-
expect(callbackManager1.metadata).toEqual({ a: "a", b: "b" });
|
|
438
|
-
expect(callbackManager1.inheritableMetadata).toEqual({ a: "a" });
|
|
439
|
-
const callbackManager2 = callbackManager1.copy([handler3]);
|
|
440
|
-
expect(callbackManager2.handlers.map((h) => h.name)).toEqual([
|
|
441
|
-
handler1.name,
|
|
442
|
-
handler2.name,
|
|
443
|
-
handler3.name,
|
|
444
|
-
]);
|
|
445
|
-
expect(callbackManager2.inheritableHandlers.map((h) => h.name)).toEqual([
|
|
446
|
-
handler1.name,
|
|
447
|
-
handler3.name,
|
|
448
|
-
]);
|
|
449
|
-
expect(callbackManager2.tags).toEqual(["a", "b"]);
|
|
450
|
-
expect(callbackManager2.inheritableTags).toEqual(["a"]);
|
|
451
|
-
const callbackManager3 = callbackManager2.copy([handler4], false);
|
|
452
|
-
expect(callbackManager3.handlers.map((h) => h.name)).toEqual([
|
|
453
|
-
handler1.name,
|
|
454
|
-
handler2.name,
|
|
455
|
-
handler3.name,
|
|
456
|
-
handler4.name,
|
|
457
|
-
]);
|
|
458
|
-
expect(callbackManager3.inheritableHandlers.map((h) => h.name)).toEqual([
|
|
459
|
-
handler1.name,
|
|
460
|
-
handler3.name,
|
|
461
|
-
]);
|
|
462
|
-
});
|
|
463
|
-
class FakeCallbackHandlerWithErrors extends FakeCallbackHandler {
|
|
464
|
-
constructor(input) {
|
|
465
|
-
super({ ...input, raiseError: true });
|
|
466
|
-
}
|
|
467
|
-
async handleChainStart(_chain, _inputs) {
|
|
468
|
-
throw Error("error!");
|
|
469
|
-
}
|
|
470
|
-
async handleLLMStart(_llm, _prompts) {
|
|
471
|
-
throw Error("llm start error!");
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
test("error handling in chain start", async () => {
|
|
475
|
-
const handler = new FakeCallbackHandlerWithErrors({
|
|
476
|
-
ignoreLLM: true,
|
|
477
|
-
});
|
|
478
|
-
const manager = new CallbackManager(undefined);
|
|
479
|
-
manager.addHandler(handler);
|
|
480
|
-
await expect(async () => {
|
|
481
|
-
await manager.handleChainStart(serialized, ["test"]);
|
|
482
|
-
}).rejects.toThrowError();
|
|
483
|
-
await manager.handleLLMStart(serialized, ["test"]);
|
|
484
|
-
});
|
|
485
|
-
test("error handling in llm start", async () => {
|
|
486
|
-
const handler = new FakeCallbackHandlerWithErrors({
|
|
487
|
-
ignoreChain: true,
|
|
488
|
-
});
|
|
489
|
-
const manager = new CallbackManager(undefined);
|
|
490
|
-
manager.addHandler(handler);
|
|
491
|
-
await manager.handleChainStart(serialized, ["test"]);
|
|
492
|
-
await expect(async () => {
|
|
493
|
-
await manager.handleLLMStart(serialized, ["test"]);
|
|
494
|
-
}).rejects.toThrowError();
|
|
495
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-process-env */
|
|
2
|
-
import { test } from "@jest/globals";
|
|
3
|
-
import { PromptTemplate } from "../../prompts/prompt.js";
|
|
4
|
-
import { FakeLLM } from "../../utils/testing/index.js";
|
|
5
|
-
import { traceAsGroup, TraceGroup } from "../manager.js";
|
|
6
|
-
import { StringOutputParser } from "../../output_parsers/string.js";
|
|
7
|
-
test("Test grouping traces", async () => {
|
|
8
|
-
process.env.LANGCHAIN_TRACING_V2 = "true";
|
|
9
|
-
const chain = PromptTemplate.fromTemplate("hello world")
|
|
10
|
-
.pipe(new FakeLLM({}))
|
|
11
|
-
.pipe(new StringOutputParser());
|
|
12
|
-
const nextChain = PromptTemplate.fromTemplate("This is the day {input2}")
|
|
13
|
-
.pipe(new FakeLLM({}))
|
|
14
|
-
.pipe(new StringOutputParser());
|
|
15
|
-
const result = await traceAsGroup({ name: "my_chain_group" }, async (manager, arg1, { chain, nextChain }) => {
|
|
16
|
-
const result = await chain.invoke({ input: arg1 }, manager);
|
|
17
|
-
const nextResult = await nextChain.invoke({ input2: result }, manager);
|
|
18
|
-
return nextResult;
|
|
19
|
-
}, "I'm arg1", { chain, nextChain });
|
|
20
|
-
console.log(result);
|
|
21
|
-
});
|
|
22
|
-
test("Test TraceGroup object", async () => {
|
|
23
|
-
const traceGroup = new TraceGroup("my_trace_group");
|
|
24
|
-
const childManager = await traceGroup.start({ input: "Hello, World" });
|
|
25
|
-
const prompt = PromptTemplate.fromTemplate("Hello, world!");
|
|
26
|
-
const result = await prompt.invoke({}, { callbacks: childManager });
|
|
27
|
-
await traceGroup.end({ value: result.value });
|
|
28
|
-
expect(result.value).toBe("Hello, world!");
|
|
29
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { v4 as uuidv4, validate } from "uuid";
|
|
2
|
-
import { ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate, } from "../../prompts/chat.js";
|
|
3
|
-
import { BaseLLM } from "../../language_models/llms.js";
|
|
4
|
-
import { StringOutputParser } from "../../output_parsers/string.js";
|
|
5
|
-
import { RunCollectorCallbackHandler } from "../../tracers/run_collector.js";
|
|
6
|
-
class FakeLLM extends BaseLLM {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
Object.defineProperty(this, "nrMapCalls", {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
configurable: true,
|
|
12
|
-
writable: true,
|
|
13
|
-
value: 0
|
|
14
|
-
});
|
|
15
|
-
Object.defineProperty(this, "nrReduceCalls", {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
configurable: true,
|
|
18
|
-
writable: true,
|
|
19
|
-
value: 0
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
_llmType() {
|
|
23
|
-
return "fake_1";
|
|
24
|
-
}
|
|
25
|
-
async _generate(_prompts) {
|
|
26
|
-
return {
|
|
27
|
-
generations: [
|
|
28
|
-
[
|
|
29
|
-
{
|
|
30
|
-
text: "Foo.",
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
],
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
describe("RunCollectorCallbackHandler", () => {
|
|
38
|
-
it("should persist the given run object and set the reference_example_id to the exampleId", async () => {
|
|
39
|
-
// Create a chain that uses the dataset
|
|
40
|
-
const prompt = ChatPromptTemplate.fromMessages([
|
|
41
|
-
SystemMessagePromptTemplate.fromTemplate("You are in a rap battle."),
|
|
42
|
-
HumanMessagePromptTemplate.fromTemplate("Write the following {input}"),
|
|
43
|
-
]);
|
|
44
|
-
const model = new FakeLLM({});
|
|
45
|
-
const chain = prompt.pipe(model).pipe(new StringOutputParser());
|
|
46
|
-
const exampleId = uuidv4();
|
|
47
|
-
const collector = new RunCollectorCallbackHandler({ exampleId });
|
|
48
|
-
await chain.invoke({ input: "foo" }, { callbacks: [collector] });
|
|
49
|
-
expect(collector.tracedRuns.length).toBe(1);
|
|
50
|
-
const tracedRun = collector.tracedRuns[0];
|
|
51
|
-
expect(tracedRun.id).toBeDefined();
|
|
52
|
-
if (tracedRun.id && validate(tracedRun.id)) {
|
|
53
|
-
expect(validate(tracedRun.id)).toBe(true);
|
|
54
|
-
}
|
|
55
|
-
expect(tracedRun.reference_example_id).toBe(exampleId);
|
|
56
|
-
expect(tracedRun?.child_runs?.length).toBe(3);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|