langwatch 0.0.3 → 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.
- package/dist/{chunk-AP23NJ57.mjs → chunk-OVS4NSDE.mjs} +373 -2
- package/dist/chunk-OVS4NSDE.mjs.map +1 -0
- package/dist/index.d.mts +47 -5
- package/dist/index.d.ts +47 -5
- package/dist/index.js +6275 -485
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +329 -349
- package/dist/index.mjs.map +1 -1
- package/dist/{utils-Dg5eWsAz.d.mts → utils-K-jSEpnZ.d.mts} +11 -7
- package/dist/{utils-Dg5eWsAz.d.ts → utils-K-jSEpnZ.d.ts} +11 -7
- package/dist/utils.d.mts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +370 -0
- package/dist/utils.js.map +1 -1
- package/dist/utils.mjs +3 -1
- package/example/README.md +3 -1
- package/example/app/(chat)/chat/[id]/page.tsx +1 -1
- package/example/app/(chat)/page.tsx +10 -5
- package/example/app/langchain/page.tsx +27 -0
- package/example/app/langchain-rag/page.tsx +28 -0
- package/example/app/share/[id]/page.tsx +1 -1
- package/example/components/chat-list.tsx +1 -1
- package/example/components/chat-panel.tsx +1 -1
- package/example/components/header.tsx +35 -13
- package/example/components/prompt-form.tsx +1 -1
- package/example/components/stocks/stock-purchase.tsx +1 -1
- package/example/components/stocks/stocks.tsx +1 -1
- package/example/lib/chat/langchain-rag.tsx +191 -0
- package/example/lib/chat/langchain.tsx +112 -0
- package/example/lib/chat/{actions.tsx → vercel-ai.tsx} +4 -6
- package/example/package-lock.json +287 -4
- package/example/package.json +1 -0
- package/package.json +12 -2
- package/src/index.test.ts +96 -28
- package/src/index.ts +18 -9
- package/src/langchain.ts +557 -0
- package/src/types.ts +4 -4
- package/src/utils.ts +28 -1
- package/dist/chunk-AP23NJ57.mjs.map +0 -1
- /package/src/{helpers.ts → typeUtils.ts} +0 -0
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
__spreadProps,
|
|
3
3
|
__spreadValues,
|
|
4
|
+
autoconvertTypedValues,
|
|
4
5
|
captureError,
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
collectorRESTParamsSchema,
|
|
7
|
+
convertFromVercelAIMessages,
|
|
8
|
+
spanSchema
|
|
9
|
+
} from "./chunk-OVS4NSDE.mjs";
|
|
7
10
|
|
|
8
11
|
// src/index.ts
|
|
9
12
|
import EventEmitter from "events";
|
|
@@ -11,7 +14,7 @@ import { nanoid } from "nanoid";
|
|
|
11
14
|
import { ZodError } from "zod";
|
|
12
15
|
import { fromZodError } from "zod-validation-error";
|
|
13
16
|
|
|
14
|
-
// src/
|
|
17
|
+
// src/typeUtils.ts
|
|
15
18
|
function camelToSnakeCase(str) {
|
|
16
19
|
return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
17
20
|
}
|
|
@@ -34,348 +37,318 @@ function camelToSnakeCaseNested(obj) {
|
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
|
|
37
|
-
// src/
|
|
38
|
-
import {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
])
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
})
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
output
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
);
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
var
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
]);
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
)
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
thread_id: z.union([z.string(), z.undefined()]).optional().nullable(),
|
|
350
|
-
customer_id: z.union([z.string(), z.undefined()]).optional().nullable(),
|
|
351
|
-
labels: z.union([z.array(z.string()), z.undefined()]).optional().nullable(),
|
|
352
|
-
experiments: z.union([z.array(experimentSchema), z.undefined()]).optional().nullable()
|
|
353
|
-
}).optional()
|
|
354
|
-
});
|
|
355
|
-
var collectorRESTParamsValidatorSchema = collectorRESTParamsSchema.omit({ spans: true });
|
|
356
|
-
var datasetSpanSchema = z.union([
|
|
357
|
-
baseSpanSchema.omit({
|
|
358
|
-
project_id: true,
|
|
359
|
-
trace_id: true,
|
|
360
|
-
id: true,
|
|
361
|
-
timestamps: true,
|
|
362
|
-
metrics: true
|
|
363
|
-
}),
|
|
364
|
-
lLMSpanSchema.omit({
|
|
365
|
-
project_id: true,
|
|
366
|
-
trace_id: true,
|
|
367
|
-
id: true,
|
|
368
|
-
timestamps: true,
|
|
369
|
-
metrics: true
|
|
370
|
-
}),
|
|
371
|
-
rAGSpanSchema.omit({
|
|
372
|
-
project_id: true,
|
|
373
|
-
trace_id: true,
|
|
374
|
-
id: true,
|
|
375
|
-
timestamps: true,
|
|
376
|
-
metrics: true
|
|
377
|
-
})
|
|
378
|
-
]);
|
|
40
|
+
// src/langchain.ts
|
|
41
|
+
import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
|
|
42
|
+
import {
|
|
43
|
+
AIMessage,
|
|
44
|
+
AIMessageChunk,
|
|
45
|
+
FunctionMessage,
|
|
46
|
+
FunctionMessageChunk,
|
|
47
|
+
HumanMessage,
|
|
48
|
+
HumanMessageChunk,
|
|
49
|
+
SystemMessage,
|
|
50
|
+
SystemMessageChunk,
|
|
51
|
+
ToolMessage,
|
|
52
|
+
ToolMessageChunk,
|
|
53
|
+
mapChatMessagesToStoredMessages
|
|
54
|
+
} from "@langchain/core/messages";
|
|
55
|
+
import { stringify } from "javascript-stringify";
|
|
56
|
+
var LangWatchCallbackHandler = class extends BaseCallbackHandler {
|
|
57
|
+
constructor({ trace }) {
|
|
58
|
+
super();
|
|
59
|
+
this.name = "LangWatchCallbackHandler";
|
|
60
|
+
this.spans = {};
|
|
61
|
+
this.trace = trace;
|
|
62
|
+
}
|
|
63
|
+
async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, _tags, metadata, name) {
|
|
64
|
+
this.spans[runId] = this.buildLLMSpan({
|
|
65
|
+
llm,
|
|
66
|
+
runId,
|
|
67
|
+
parentRunId,
|
|
68
|
+
input: {
|
|
69
|
+
type: "json",
|
|
70
|
+
value: prompts
|
|
71
|
+
},
|
|
72
|
+
extraParams,
|
|
73
|
+
metadata,
|
|
74
|
+
name
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
buildLLMSpan({
|
|
78
|
+
llm,
|
|
79
|
+
runId,
|
|
80
|
+
parentRunId,
|
|
81
|
+
input,
|
|
82
|
+
extraParams,
|
|
83
|
+
metadata,
|
|
84
|
+
name
|
|
85
|
+
}) {
|
|
86
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
87
|
+
try {
|
|
88
|
+
const parent = this.getParent(parentRunId);
|
|
89
|
+
const vendor = (_b = metadata == null ? void 0 : metadata.ls_provider) != null ? _b : (_a = llm.id.at(-2)) == null ? void 0 : _a.toString();
|
|
90
|
+
const model = (_e = (_d = metadata == null ? void 0 : metadata.ls_model_name) != null ? _d : (_c = llm.kwargs) == null ? void 0 : _c.model) != null ? _e : "unknown";
|
|
91
|
+
const span = parent.startLLMSpan({
|
|
92
|
+
spanId: runId,
|
|
93
|
+
name: name != null ? name : (_f = llm.id.at(-1)) == null ? void 0 : _f.toString(),
|
|
94
|
+
input,
|
|
95
|
+
model: [vendor, model].filter((x) => x).join("/"),
|
|
96
|
+
params: __spreadValues({
|
|
97
|
+
temperature: (_g = extraParams == null ? void 0 : extraParams.invocation_params) == null ? void 0 : _g.temperature
|
|
98
|
+
}, ((_h = extraParams == null ? void 0 : extraParams.invocation_params) == null ? void 0 : _h.functions) ? { functions: (_i = extraParams == null ? void 0 : extraParams.invocation_params) == null ? void 0 : _i.functions } : {})
|
|
99
|
+
});
|
|
100
|
+
return span;
|
|
101
|
+
} catch (e) {
|
|
102
|
+
this.trace.client.emit("error", e);
|
|
103
|
+
throw e;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
|
|
107
|
+
this.spans[runId] = this.buildLLMSpan({
|
|
108
|
+
name,
|
|
109
|
+
llm,
|
|
110
|
+
runId,
|
|
111
|
+
parentRunId,
|
|
112
|
+
input: {
|
|
113
|
+
type: "chat_messages",
|
|
114
|
+
value: messages.flatMap(convertFromLangChainMessages)
|
|
115
|
+
},
|
|
116
|
+
extraParams,
|
|
117
|
+
metadata
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
async handleNewToken(_token, runId) {
|
|
121
|
+
const span = this.spans[runId];
|
|
122
|
+
if (runId && span && !span.timestamps.firstTokenAt) {
|
|
123
|
+
span.update({
|
|
124
|
+
timestamps: __spreadProps(__spreadValues({}, span.timestamps), { firstTokenAt: Date.now() })
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async handleLLMEnd(response, runId, _parentRunId) {
|
|
129
|
+
try {
|
|
130
|
+
const span = this.spans[runId];
|
|
131
|
+
if (!span) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const outputs = [];
|
|
135
|
+
for (const generation of response.generations) {
|
|
136
|
+
for (const generation_ of generation) {
|
|
137
|
+
if ("message" in generation_) {
|
|
138
|
+
outputs.push({
|
|
139
|
+
type: "chat_messages",
|
|
140
|
+
value: convertFromLangChainMessages([
|
|
141
|
+
generation_.message
|
|
142
|
+
])
|
|
143
|
+
});
|
|
144
|
+
} else if ("text" in generation_) {
|
|
145
|
+
outputs.push({
|
|
146
|
+
type: "text",
|
|
147
|
+
value: generation_.text
|
|
148
|
+
});
|
|
149
|
+
} else {
|
|
150
|
+
outputs.push({
|
|
151
|
+
type: "text",
|
|
152
|
+
value: JSON.stringify(generation_)
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const output = outputs.length === 1 ? outputs[0] : { type: "list", value: outputs };
|
|
158
|
+
span.end({
|
|
159
|
+
output
|
|
160
|
+
// ...(metrics ? { metrics } : {}),
|
|
161
|
+
});
|
|
162
|
+
} catch (e) {
|
|
163
|
+
this.trace.client.emit("error", e);
|
|
164
|
+
throw e;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async handleLLMError(err, runId, _parentRunId) {
|
|
168
|
+
this.errorSpan({ runId, error: err });
|
|
169
|
+
}
|
|
170
|
+
async handleChainStart(chain, inputs, runId, parentRunId, _tags, _metadata, _runType, name) {
|
|
171
|
+
this.spans[runId] = this.buildSpan({
|
|
172
|
+
type: "chain",
|
|
173
|
+
serialized: chain,
|
|
174
|
+
runId,
|
|
175
|
+
parentRunId,
|
|
176
|
+
input: inputs,
|
|
177
|
+
name
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
async handleChainEnd(output, runId, _parentRunId) {
|
|
181
|
+
this.endSpan({
|
|
182
|
+
runId,
|
|
183
|
+
output
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
async handleChainError(err, runId, _parentRunId, _tags, _kwargs) {
|
|
187
|
+
this.errorSpan({ runId, error: err });
|
|
188
|
+
}
|
|
189
|
+
async handleToolStart(tool, input, runId, parentRunId, _tags, _metadata, name) {
|
|
190
|
+
this.spans[runId] = this.buildSpan({
|
|
191
|
+
type: "tool",
|
|
192
|
+
serialized: tool,
|
|
193
|
+
runId,
|
|
194
|
+
parentRunId,
|
|
195
|
+
input,
|
|
196
|
+
name
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
async handleToolEnd(output, runId, _parentRunId) {
|
|
200
|
+
this.endSpan({ runId, output });
|
|
201
|
+
}
|
|
202
|
+
async handleToolError(err, runId, _parentRunId, _tags) {
|
|
203
|
+
this.errorSpan({ runId, error: err });
|
|
204
|
+
}
|
|
205
|
+
async handleRetrieverStart(retriever, query, runId, parentRunId, _tags, _metadata, name) {
|
|
206
|
+
var _a, _b;
|
|
207
|
+
try {
|
|
208
|
+
const parent = this.getParent(parentRunId);
|
|
209
|
+
this.spans[runId] = parent.startRAGSpan({
|
|
210
|
+
spanId: runId,
|
|
211
|
+
name: (_b = name != null ? name : retriever.name) != null ? _b : (_a = retriever.id.at(-1)) == null ? void 0 : _a.toString(),
|
|
212
|
+
input: this.autoconvertTypedValues(query)
|
|
213
|
+
});
|
|
214
|
+
} catch (e) {
|
|
215
|
+
this.trace.client.emit("error", e);
|
|
216
|
+
throw e;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async handleRetrieverEnd(documents, runId, _parentRunId, _tags) {
|
|
220
|
+
try {
|
|
221
|
+
const contexts = documents.map((doc) => __spreadValues({
|
|
222
|
+
content: doc.pageContent
|
|
223
|
+
}, doc.metadata.source ? { documentId: doc.metadata.source } : {}));
|
|
224
|
+
const span = this.spans[runId];
|
|
225
|
+
if (!span) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
span.end({
|
|
229
|
+
contexts,
|
|
230
|
+
output: this.autoconvertTypedValues(documents)
|
|
231
|
+
});
|
|
232
|
+
} catch (e) {
|
|
233
|
+
this.trace.client.emit("error", e);
|
|
234
|
+
throw e;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async handleRetrieverError(err, runId, _parentRunId, _tags) {
|
|
238
|
+
this.errorSpan({ runId, error: err });
|
|
239
|
+
}
|
|
240
|
+
async handleAgentAction(_action, runId, _parentRunId, _tags) {
|
|
241
|
+
const span = this.spans[runId];
|
|
242
|
+
if (!span) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
span.update({
|
|
246
|
+
type: "agent"
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
async handleAgentEnd(action, runId, _parentRunId, _tags) {
|
|
250
|
+
this.endSpan({
|
|
251
|
+
runId,
|
|
252
|
+
output: action.returnValues
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
buildSpan({
|
|
256
|
+
type,
|
|
257
|
+
serialized,
|
|
258
|
+
runId,
|
|
259
|
+
parentRunId,
|
|
260
|
+
input,
|
|
261
|
+
name
|
|
262
|
+
}) {
|
|
263
|
+
var _a, _b;
|
|
264
|
+
try {
|
|
265
|
+
const parent = this.getParent(parentRunId);
|
|
266
|
+
const span = parent.startSpan({
|
|
267
|
+
spanId: runId,
|
|
268
|
+
type,
|
|
269
|
+
name: (_b = name != null ? name : serialized.name) != null ? _b : (_a = serialized.id.at(-1)) == null ? void 0 : _a.toString(),
|
|
270
|
+
input: this.autoconvertTypedValues(input)
|
|
271
|
+
});
|
|
272
|
+
return span;
|
|
273
|
+
} catch (e) {
|
|
274
|
+
this.trace.client.emit("error", e);
|
|
275
|
+
throw e;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
endSpan({ runId, output }) {
|
|
279
|
+
try {
|
|
280
|
+
const span = this.spans[runId];
|
|
281
|
+
if (!span) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
span.end({
|
|
285
|
+
output: this.autoconvertTypedValues(output)
|
|
286
|
+
});
|
|
287
|
+
} catch (e) {
|
|
288
|
+
this.trace.client.emit("error", e);
|
|
289
|
+
throw e;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
errorSpan({ runId, error }) {
|
|
293
|
+
const span = this.spans[runId];
|
|
294
|
+
if (!span) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
span.end({
|
|
298
|
+
error
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
autoconvertTypedValues(value) {
|
|
302
|
+
var _a;
|
|
303
|
+
if (!value || typeof value === "object" && Object.keys(value).length === 0) {
|
|
304
|
+
return void 0;
|
|
305
|
+
}
|
|
306
|
+
if (typeof value === "string") {
|
|
307
|
+
return { type: "text", value };
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
JSON.stringify(value);
|
|
311
|
+
return { type: "json", value };
|
|
312
|
+
} catch (e) {
|
|
313
|
+
return { type: "text", value: (_a = stringify(value)) != null ? _a : value.toString() };
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
getParent(parentRunId) {
|
|
317
|
+
var _a, _b;
|
|
318
|
+
return (_b = parentRunId ? this.spans[parentRunId] : this.spans[(_a = Object.keys(this.spans).at(-1)) != null ? _a : ""]) != null ? _b : this.trace;
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
var convertFromLangChainMessages = (messages) => {
|
|
322
|
+
const chatMessages = [];
|
|
323
|
+
for (const message of messages) {
|
|
324
|
+
chatMessages.push(convertFromLangChainMessage(message));
|
|
325
|
+
}
|
|
326
|
+
return chatMessages;
|
|
327
|
+
};
|
|
328
|
+
var convertFromLangChainMessage = (message) => {
|
|
329
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
330
|
+
let role = "user";
|
|
331
|
+
const message_ = message.lc_serializable ? mapChatMessagesToStoredMessages([message])[0] : message;
|
|
332
|
+
if (message_ instanceof HumanMessage || message_ instanceof HumanMessageChunk || ((_a = message_.id) == null ? void 0 : _a.at(-1)) === "HumanMessage" || ((_b = message_.id) == null ? void 0 : _b.at(-1)) === "HumanMessageChunk" || message_.type === "human") {
|
|
333
|
+
role = "user";
|
|
334
|
+
} else if (message instanceof AIMessage || message instanceof AIMessageChunk || ((_c = message.id) == null ? void 0 : _c.at(-1)) === "AIMessage" || ((_d = message.id) == null ? void 0 : _d.at(-1)) === "AIMessageChunk" || message_.type === "ai") {
|
|
335
|
+
role = "assistant";
|
|
336
|
+
} else if (message instanceof SystemMessage || message instanceof SystemMessageChunk || ((_e = message.id) == null ? void 0 : _e.at(-1)) === "SystemMessage" || ((_f = message.id) == null ? void 0 : _f.at(-1)) === "SystemMessageChunk" || message_.type === "system") {
|
|
337
|
+
role = "system";
|
|
338
|
+
} else if (message instanceof FunctionMessage || message instanceof FunctionMessageChunk || ((_g = message.id) == null ? void 0 : _g.at(-1)) === "FunctionMessage" || ((_h = message.id) == null ? void 0 : _h.at(-1)) === "FunctionMessageChunk" || message_.type === "function") {
|
|
339
|
+
role = "function";
|
|
340
|
+
} else if (message instanceof ToolMessage || message instanceof ToolMessageChunk || ((_i = message.id) == null ? void 0 : _i.at(-1)) === "ToolMessage" || ((_j = message.id) == null ? void 0 : _j.at(-1)) === "ToolMessageChunk" || message_.type === "tool") {
|
|
341
|
+
role = "tool";
|
|
342
|
+
}
|
|
343
|
+
const content = typeof message.content === "string" ? message.content : message.content.map(
|
|
344
|
+
(content2) => content2.type === "text" ? { type: "text", text: content2.text } : content2.type == "image_url" ? { type: "image_url", image_url: content2.image_url } : { type: "text", text: JSON.stringify(content2) }
|
|
345
|
+
);
|
|
346
|
+
const functionCall = message.additional_kwargs;
|
|
347
|
+
return __spreadValues({
|
|
348
|
+
role,
|
|
349
|
+
content
|
|
350
|
+
}, functionCall && typeof functionCall === "object" && Object.keys(functionCall).length > 0 ? { function_call: functionCall } : {});
|
|
351
|
+
};
|
|
379
352
|
|
|
380
353
|
// src/index.ts
|
|
381
354
|
var LangWatch = class extends EventEmitter {
|
|
@@ -487,6 +460,12 @@ var LangWatchTrace = class {
|
|
|
487
460
|
}, params));
|
|
488
461
|
return span;
|
|
489
462
|
}
|
|
463
|
+
getLangChainCallback() {
|
|
464
|
+
if (!this.langchainCallback) {
|
|
465
|
+
this.langchainCallback = new LangWatchCallbackHandler({ trace: this });
|
|
466
|
+
}
|
|
467
|
+
return this.langchainCallback;
|
|
468
|
+
}
|
|
490
469
|
onEnd(span) {
|
|
491
470
|
this.finishedSpans[span.span_id] = span;
|
|
492
471
|
this.delayedSendSpans();
|
|
@@ -526,7 +505,7 @@ var LangWatchSpan = class _LangWatchSpan {
|
|
|
526
505
|
type,
|
|
527
506
|
name,
|
|
528
507
|
input,
|
|
529
|
-
|
|
508
|
+
output,
|
|
530
509
|
error,
|
|
531
510
|
timestamps,
|
|
532
511
|
metrics
|
|
@@ -537,7 +516,7 @@ var LangWatchSpan = class _LangWatchSpan {
|
|
|
537
516
|
this.type = type != null ? type : "span";
|
|
538
517
|
this.name = name;
|
|
539
518
|
this.input = input;
|
|
540
|
-
this.
|
|
519
|
+
this.output = output;
|
|
541
520
|
this.error = error;
|
|
542
521
|
this.timestamps = timestamps != null ? timestamps : {
|
|
543
522
|
startedAt: Date.now()
|
|
@@ -561,8 +540,8 @@ var LangWatchSpan = class _LangWatchSpan {
|
|
|
561
540
|
if ("input" in params) {
|
|
562
541
|
this.input = params.input;
|
|
563
542
|
}
|
|
564
|
-
if (params
|
|
565
|
-
this.
|
|
543
|
+
if ("output" in params) {
|
|
544
|
+
this.output = params.output;
|
|
566
545
|
}
|
|
567
546
|
if ("error" in params) {
|
|
568
547
|
this.error = params.error;
|
|
@@ -665,6 +644,7 @@ export {
|
|
|
665
644
|
LangWatchRAGSpan,
|
|
666
645
|
LangWatchSpan,
|
|
667
646
|
LangWatchTrace,
|
|
647
|
+
autoconvertTypedValues,
|
|
668
648
|
captureError,
|
|
669
649
|
convertFromVercelAIMessages
|
|
670
650
|
};
|