langwatch 0.1.0 → 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 +44 -2
- package/dist/index.d.ts +44 -2
- package/dist/index.js +6256 -472
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +325 -351
- package/dist/index.mjs.map +1 -1
- package/dist/{utils-DDcm0z9v.d.mts → utils-K-jSEpnZ.d.mts} +4 -3
- package/dist/{utils-DDcm0z9v.d.ts → utils-K-jSEpnZ.d.ts} +4 -3
- 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/package-lock.json +285 -3
- package/example/package.json +1 -0
- package/package.json +11 -2
- package/src/index.ts +12 -3
- package/src/langchain.ts +557 -0
- package/src/types.ts +1 -1
- package/src/utils.ts +28 -1
- package/dist/chunk-AP23NJ57.mjs.map +0 -1
- /package/example/lib/chat/{actions.tsx → vercel-ai.tsx} +0 -0
- /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,354 +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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
var
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
);
|
|
350
|
-
var collectorRESTParamsSchema = z.object({
|
|
351
|
-
trace_id: z.union([z.string(), z.undefined()]).optional().nullable(),
|
|
352
|
-
spans: z.array(spanSchema),
|
|
353
|
-
metadata: z.object({
|
|
354
|
-
user_id: z.union([z.string(), z.undefined()]).optional().nullable(),
|
|
355
|
-
thread_id: z.union([z.string(), z.undefined()]).optional().nullable(),
|
|
356
|
-
customer_id: z.union([z.string(), z.undefined()]).optional().nullable(),
|
|
357
|
-
labels: z.union([z.array(z.string()), z.undefined()]).optional().nullable(),
|
|
358
|
-
experiments: z.union([z.array(experimentSchema), z.undefined()]).optional().nullable()
|
|
359
|
-
}).optional()
|
|
360
|
-
});
|
|
361
|
-
var collectorRESTParamsValidatorSchema = collectorRESTParamsSchema.omit({ spans: true });
|
|
362
|
-
var datasetSpanSchema = z.union([
|
|
363
|
-
baseSpanSchema.omit({
|
|
364
|
-
project_id: true,
|
|
365
|
-
trace_id: true,
|
|
366
|
-
id: true,
|
|
367
|
-
timestamps: true,
|
|
368
|
-
metrics: true
|
|
369
|
-
}),
|
|
370
|
-
lLMSpanSchema.omit({
|
|
371
|
-
project_id: true,
|
|
372
|
-
trace_id: true,
|
|
373
|
-
id: true,
|
|
374
|
-
timestamps: true,
|
|
375
|
-
metrics: true
|
|
376
|
-
}),
|
|
377
|
-
rAGSpanSchema.omit({
|
|
378
|
-
project_id: true,
|
|
379
|
-
trace_id: true,
|
|
380
|
-
id: true,
|
|
381
|
-
timestamps: true,
|
|
382
|
-
metrics: true
|
|
383
|
-
})
|
|
384
|
-
]);
|
|
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
|
+
};
|
|
385
352
|
|
|
386
353
|
// src/index.ts
|
|
387
354
|
var LangWatch = class extends EventEmitter {
|
|
@@ -493,6 +460,12 @@ var LangWatchTrace = class {
|
|
|
493
460
|
}, params));
|
|
494
461
|
return span;
|
|
495
462
|
}
|
|
463
|
+
getLangChainCallback() {
|
|
464
|
+
if (!this.langchainCallback) {
|
|
465
|
+
this.langchainCallback = new LangWatchCallbackHandler({ trace: this });
|
|
466
|
+
}
|
|
467
|
+
return this.langchainCallback;
|
|
468
|
+
}
|
|
496
469
|
onEnd(span) {
|
|
497
470
|
this.finishedSpans[span.span_id] = span;
|
|
498
471
|
this.delayedSendSpans();
|
|
@@ -671,6 +644,7 @@ export {
|
|
|
671
644
|
LangWatchRAGSpan,
|
|
672
645
|
LangWatchSpan,
|
|
673
646
|
LangWatchTrace,
|
|
647
|
+
autoconvertTypedValues,
|
|
674
648
|
captureError,
|
|
675
649
|
convertFromVercelAIMessages
|
|
676
650
|
};
|