@webywz/agent-trace 0.0.0-stage → 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.
Files changed (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -2
  3. package/dist/args.d.ts +23 -0
  4. package/dist/args.d.ts.map +1 -0
  5. package/dist/args.js +216 -0
  6. package/dist/args.js.map +1 -0
  7. package/dist/cli.d.ts +4 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +145 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/color.d.ts +15 -0
  12. package/dist/color.d.ts.map +1 -0
  13. package/dist/color.js +29 -0
  14. package/dist/color.js.map +1 -0
  15. package/dist/index.d.ts +10 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +9 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/parse/event.d.ts +5 -0
  20. package/dist/parse/event.d.ts.map +1 -0
  21. package/dist/parse/event.js +204 -0
  22. package/dist/parse/event.js.map +1 -0
  23. package/dist/parse/generic.d.ts +4 -0
  24. package/dist/parse/generic.d.ts.map +1 -0
  25. package/dist/parse/generic.js +62 -0
  26. package/dist/parse/generic.js.map +1 -0
  27. package/dist/parse/index.d.ts +8 -0
  28. package/dist/parse/index.d.ts.map +1 -0
  29. package/dist/parse/index.js +71 -0
  30. package/dist/parse/index.js.map +1 -0
  31. package/dist/parse/jsonl.d.ts +8 -0
  32. package/dist/parse/jsonl.d.ts.map +1 -0
  33. package/dist/parse/jsonl.js +85 -0
  34. package/dist/parse/jsonl.js.map +1 -0
  35. package/dist/parse/langchain.d.ts +4 -0
  36. package/dist/parse/langchain.d.ts.map +1 -0
  37. package/dist/parse/langchain.js +348 -0
  38. package/dist/parse/langchain.js.map +1 -0
  39. package/dist/parse/openai.d.ts +4 -0
  40. package/dist/parse/openai.d.ts.map +1 -0
  41. package/dist/parse/openai.js +344 -0
  42. package/dist/parse/openai.js.map +1 -0
  43. package/dist/read-input.d.ts +6 -0
  44. package/dist/read-input.d.ts.map +1 -0
  45. package/dist/read-input.js +36 -0
  46. package/dist/read-input.js.map +1 -0
  47. package/dist/render/spicy.d.ts +4 -0
  48. package/dist/render/spicy.d.ts.map +1 -0
  49. package/dist/render/spicy.js +144 -0
  50. package/dist/render/spicy.js.map +1 -0
  51. package/dist/render/timeline.d.ts +4 -0
  52. package/dist/render/timeline.d.ts.map +1 -0
  53. package/dist/render/timeline.js +179 -0
  54. package/dist/render/timeline.js.map +1 -0
  55. package/dist/stats.d.ts +3 -0
  56. package/dist/stats.d.ts.map +1 -0
  57. package/dist/stats.js +64 -0
  58. package/dist/stats.js.map +1 -0
  59. package/dist/types.d.ts +49 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +2 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/util.d.ts +17 -0
  64. package/dist/util.d.ts.map +1 -0
  65. package/dist/util.js +185 -0
  66. package/dist/util.js.map +1 -0
  67. package/examples/README.md +44 -0
  68. package/examples/generic.json +29 -0
  69. package/examples/langchain.json +55 -0
  70. package/examples/openai.json +29 -0
  71. package/examples/run.jsonl +19 -0
  72. package/package.json +59 -4
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export { parseTrace } from "./parse/index.js";
2
+ export { parseOpenAI } from "./parse/openai.js";
3
+ export { parseLangChain } from "./parse/langchain.js";
4
+ export { parseJsonl } from "./parse/jsonl.js";
5
+ export { parseGeneric } from "./parse/generic.js";
6
+ export { renderTimeline, summaryLine } from "./render/timeline.js";
7
+ export { spicyNarrative, localSpicy } from "./render/spicy.js";
8
+ export { computeStats } from "./stats.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { StepKind, TraceStep } from "../types.js";
2
+ export declare function normalizeEvent(value: unknown, index: number): TraceStep | null;
3
+ export declare function titleFor(kind: StepKind, name?: string): string;
4
+ export declare function reindex(steps: TraceStep[]): TraceStep[];
5
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/parse/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA2DvD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAqG9E;AAwBD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB9D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAEvD"}
@@ -0,0 +1,204 @@
1
+ import { coerceJson, compactJson, flattenText, isRecord, looksLikeError, parseTimestamp, pickNumber, pickString, pickUnknown, } from "../util.js";
2
+ const KIND_ALIASES = {
3
+ user: "user",
4
+ human: "user",
5
+ system: "system",
6
+ thought: "thought",
7
+ thinking: "thought",
8
+ reasoning: "thought",
9
+ reason: "thought",
10
+ assistant: "assistant",
11
+ ai: "assistant",
12
+ bot: "assistant",
13
+ llm: "assistant",
14
+ model: "assistant",
15
+ message: "assistant",
16
+ tool: "tool_call",
17
+ tool_call: "tool_call",
18
+ toolcall: "tool_call",
19
+ function_call: "tool_call",
20
+ function: "tool_call",
21
+ action: "tool_call",
22
+ agent_action: "tool_call",
23
+ tool_use: "tool_call",
24
+ tool_result: "tool_result",
25
+ toolresult: "tool_result",
26
+ observation: "tool_result",
27
+ function_output: "tool_result",
28
+ function_call_output: "tool_result",
29
+ tool_output: "tool_result",
30
+ output: "tool_result",
31
+ result: "tool_result",
32
+ error: "error",
33
+ fail: "error",
34
+ failure: "error",
35
+ exception: "error",
36
+ stderr: "error",
37
+ };
38
+ const SKIP_TYPES = new Set([
39
+ "ping",
40
+ "heartbeat",
41
+ "span_start",
42
+ "metadata",
43
+ "trace_start",
44
+ "trace_end",
45
+ ]);
46
+ export function normalizeEvent(value, index) {
47
+ if (value == null)
48
+ return null;
49
+ if (typeof value === "string") {
50
+ const text = value.trim();
51
+ if (!text)
52
+ return null;
53
+ return {
54
+ index,
55
+ kind: "other",
56
+ title: "event",
57
+ content: text,
58
+ };
59
+ }
60
+ if (!isRecord(value))
61
+ return null;
62
+ const rawType = pickString(value, ["type", "event", "kind", "role", "run_type", "object"]);
63
+ const typeKey = rawType?.toLowerCase().replace(/[\s-]+/g, "_");
64
+ if (typeKey && SKIP_TYPES.has(typeKey))
65
+ return null;
66
+ let kind = (typeKey && KIND_ALIASES[typeKey]) || inferKind(value, typeKey);
67
+ const name = pickString(value, [
68
+ "name",
69
+ "tool",
70
+ "tool_name",
71
+ "toolName",
72
+ "function",
73
+ "function_name",
74
+ "action",
75
+ ]);
76
+ const toolCallId = pickString(value, ["tool_call_id", "toolCallId", "call_id", "id"]);
77
+ const args = pickUnknown(value, [
78
+ "args",
79
+ "arguments",
80
+ "input",
81
+ "inputs",
82
+ "params",
83
+ "parameters",
84
+ "tool_input",
85
+ ]);
86
+ const result = pickUnknown(value, ["result", "output", "outputs", "observation", "response"]);
87
+ const content = flattenText(pickUnknown(value, ["content", "text", "message", "output_text", "delta"]) ??
88
+ (kind === "tool_call" ? args : kind === "tool_result" ? result : undefined)) ??
89
+ (kind === "tool_call" && args != null ? compactJson(coerceJson(args)) : undefined) ??
90
+ (kind === "tool_result" && result != null ? compactJson(coerceJson(result)) : undefined);
91
+ const error = flattenText(value.error) ??
92
+ flattenText(value.exception) ??
93
+ looksLikeError(value) ??
94
+ (kind === "error" ? content : undefined);
95
+ if (error && kind !== "tool_call")
96
+ kind = "error";
97
+ if (!kind) {
98
+ if (name && (args != null || value.arguments != null))
99
+ kind = "tool_call";
100
+ else if (content)
101
+ kind = "other";
102
+ else
103
+ return null;
104
+ }
105
+ const ts = parseTimestamp(pickUnknown(value, [
106
+ "ts",
107
+ "timestamp",
108
+ "time",
109
+ "created_at",
110
+ "createdAt",
111
+ "start_time",
112
+ "startTime",
113
+ "started_at",
114
+ ]));
115
+ const durationMs = pickNumber(value, ["durationMs", "duration_ms", "duration", "latency", "latency_ms"]);
116
+ const tokensIn = pickNumber(value, ["tokensIn", "tokens_in", "prompt_tokens", "input_tokens"]);
117
+ const tokensOut = pickNumber(value, ["tokensOut", "tokens_out", "completion_tokens", "output_tokens"]);
118
+ const usage = isRecord(value.usage) ? value.usage : undefined;
119
+ const usageIn = usage ? pickNumber(usage, ["prompt_tokens", "input_tokens", "tokens_in"]) : undefined;
120
+ const usageOut = usage
121
+ ? pickNumber(usage, ["completion_tokens", "output_tokens", "tokens_out"])
122
+ : undefined;
123
+ const title = titleFor(kind, name);
124
+ const step = {
125
+ index,
126
+ kind,
127
+ title,
128
+ ts,
129
+ };
130
+ if (name)
131
+ step.name = name;
132
+ if (content)
133
+ step.content = content;
134
+ if (args != null && kind === "tool_call")
135
+ step.args = coerceJson(args);
136
+ if (result != null && (kind === "tool_result" || kind === "error"))
137
+ step.result = coerceJson(result);
138
+ if (error)
139
+ step.error = error;
140
+ if (durationMs != null)
141
+ step.durationMs = durationMs;
142
+ if ((tokensIn ?? usageIn) != null)
143
+ step.tokensIn = tokensIn ?? usageIn;
144
+ if ((tokensOut ?? usageOut) != null)
145
+ step.tokensOut = tokensOut ?? usageOut;
146
+ if (toolCallId)
147
+ step.toolCallId = toolCallId;
148
+ return step;
149
+ }
150
+ function inferKind(value, typeKey) {
151
+ if (typeKey?.startsWith("on_")) {
152
+ if (typeKey.includes("error"))
153
+ return "error";
154
+ if (typeKey.includes("tool_start") || typeKey.includes("tool_call"))
155
+ return "tool_call";
156
+ if (typeKey.includes("tool_end") || typeKey.includes("tool_result"))
157
+ return "tool_result";
158
+ if (typeKey.includes("chat") || typeKey.includes("llm"))
159
+ return "thought";
160
+ if (typeKey.includes("chain"))
161
+ return "other";
162
+ }
163
+ if (value.tool_calls || value.function_call)
164
+ return "assistant";
165
+ if (value.role === "tool" || value.role === "function")
166
+ return "tool_result";
167
+ if (typeof value.role === "string") {
168
+ const aliased = KIND_ALIASES[value.role];
169
+ if (aliased)
170
+ return aliased;
171
+ }
172
+ if (value.error || value.exception)
173
+ return "error";
174
+ if (value.name && (value.arguments != null || value.args != null || value.input != null)) {
175
+ return "tool_call";
176
+ }
177
+ if (value.observation != null || (value.name && value.output != null))
178
+ return "tool_result";
179
+ return "other";
180
+ }
181
+ export function titleFor(kind, name) {
182
+ switch (kind) {
183
+ case "user":
184
+ return "user";
185
+ case "system":
186
+ return "system";
187
+ case "thought":
188
+ return "thought";
189
+ case "assistant":
190
+ return "assistant";
191
+ case "tool_call":
192
+ return name ? `tool ${name}` : "tool";
193
+ case "tool_result":
194
+ return name ? `result ${name}` : "result";
195
+ case "error":
196
+ return name ? `error ${name}` : "error";
197
+ default:
198
+ return name ?? "event";
199
+ }
200
+ }
201
+ export function reindex(steps) {
202
+ return steps.map((step, i) => ({ ...step, index: i + 1 }));
203
+ }
204
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/parse/event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Trace } from "../types.js";
2
+ export declare function parseGeneric(input: unknown, source?: string): Trace;
3
+ export declare function looksLikeGeneric(value: unknown): boolean;
4
+ //# sourceMappingURL=generic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/parse/generic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,aAAa,CAAC;AAKpD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAkBnE;AAoBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAexD"}
@@ -0,0 +1,62 @@
1
+ import { computeStats } from "../stats.js";
2
+ import { asArray, isRecord } from "../util.js";
3
+ import { normalizeEvent, reindex } from "./event.js";
4
+ export function parseGeneric(input, source) {
5
+ const warnings = [];
6
+ const rawItems = collectItems(input, warnings);
7
+ const steps = [];
8
+ for (const item of rawItems) {
9
+ const step = normalizeEvent(item, 0);
10
+ if (step)
11
+ steps.push(step);
12
+ }
13
+ const indexed = reindex(steps);
14
+ if (!indexed.length)
15
+ warnings.push("generic parser produced no steps");
16
+ const trace = {
17
+ format: "generic",
18
+ steps: indexed,
19
+ stats: computeStats(indexed),
20
+ warnings,
21
+ };
22
+ if (source)
23
+ trace.source = source;
24
+ return trace;
25
+ }
26
+ function collectItems(input, warnings) {
27
+ if (Array.isArray(input))
28
+ return input;
29
+ if (!isRecord(input)) {
30
+ warnings.push("generic parser expected an array or object");
31
+ return [];
32
+ }
33
+ for (const key of ["events", "steps", "trace", "items", "messages", "logs", "data"]) {
34
+ const value = input[key];
35
+ if (Array.isArray(value))
36
+ return value;
37
+ }
38
+ if (input.type != null || input.name != null || input.content != null || input.ts != null) {
39
+ return [input];
40
+ }
41
+ const values = Object.values(input).filter((value) => isRecord(value) || Array.isArray(value));
42
+ if (values.length === 1)
43
+ return collectItems(values[0], warnings);
44
+ return asArray(input.events);
45
+ }
46
+ export function looksLikeGeneric(value) {
47
+ const items = Array.isArray(value)
48
+ ? value
49
+ : isRecord(value) && Array.isArray(value.events)
50
+ ? value.events
51
+ : isRecord(value) && Array.isArray(value.steps)
52
+ ? value.steps
53
+ : null;
54
+ if (!items || !items.length)
55
+ return false;
56
+ const sample = items.slice(0, 8).filter(isRecord);
57
+ if (!sample.length)
58
+ return false;
59
+ const hits = sample.filter((item) => item.type != null || item.name != null || item.content != null || item.ts != null).length;
60
+ return hits >= Math.ceil(sample.length / 2);
61
+ }
62
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/parse/generic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ParseOptions, Trace } from "../types.js";
2
+ import { parseGeneric } from "./generic.js";
3
+ import { parseJsonl } from "./jsonl.js";
4
+ import { parseLangChain } from "./langchain.js";
5
+ import { parseOpenAI } from "./openai.js";
6
+ export declare function parseTrace(input: string, options?: ParseOptions): Trace;
7
+ export { parseGeneric, parseJsonl, parseLangChain, parseOpenAI };
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parse/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAe,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAoB,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAkB,UAAU,EAAc,MAAM,YAAY,CAAC;AACpE,OAAO,EAAsB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAmB,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,KAAK,CAkC3E;AAkCD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { tryJsonParse } from "../util.js";
2
+ import { looksLikeGeneric, parseGeneric } from "./generic.js";
3
+ import { looksLikeJsonl, parseJsonl, splitJsonl } from "./jsonl.js";
4
+ import { looksLikeLangChain, parseLangChain } from "./langchain.js";
5
+ import { looksLikeOpenAI, parseOpenAI } from "./openai.js";
6
+ export function parseTrace(input, options = {}) {
7
+ const source = options.source;
8
+ const trimmed = input.replace(/^\uFEFF/, "").trim();
9
+ if (!trimmed) {
10
+ throw new Error("empty trace — pass a JSON/JSONL file, pipe stdin, or use --demo");
11
+ }
12
+ const format = options.format ?? "auto";
13
+ if (format !== "auto") {
14
+ return parseAs(format, trimmed, source);
15
+ }
16
+ const json = tryJsonParse(trimmed);
17
+ if (json !== undefined) {
18
+ const detected = detectJson(json);
19
+ const trace = parseAs(detected, trimmed, source, json);
20
+ if (trace.steps.length)
21
+ return trace;
22
+ }
23
+ if (looksLikeJsonl(trimmed)) {
24
+ const jsonl = parseJsonl(trimmed, source);
25
+ if (jsonl.steps.length)
26
+ return jsonl;
27
+ }
28
+ if (json !== undefined) {
29
+ return parseGeneric(json, source);
30
+ }
31
+ const jsonl = parseJsonl(trimmed, source);
32
+ if (jsonl.steps.length)
33
+ return jsonl;
34
+ throw new Error("could not detect trace format (tried openai, langchain, jsonl, generic); pass --format to force a parser");
35
+ }
36
+ function parseAs(format, text, source, json) {
37
+ switch (format) {
38
+ case "openai":
39
+ return parseOpenAI(json ?? decode(text, format), source);
40
+ case "langchain":
41
+ return parseLangChain(json ?? decode(text, format), source);
42
+ case "generic":
43
+ return parseGeneric(json ?? decode(text, format), source);
44
+ case "jsonl":
45
+ return parseJsonl(text, source);
46
+ default: {
47
+ const _exhaustive = format;
48
+ throw new Error(`unsupported format '${String(_exhaustive)}'`);
49
+ }
50
+ }
51
+ }
52
+ function decode(text, format) {
53
+ const json = tryJsonParse(text);
54
+ if (json !== undefined)
55
+ return json;
56
+ const { rows } = splitJsonl(text);
57
+ if (rows.length)
58
+ return rows;
59
+ throw new Error(`could not parse input as ${format} (not valid JSON/JSONL for that parser)`);
60
+ }
61
+ function detectJson(value) {
62
+ if (looksLikeOpenAI(value))
63
+ return "openai";
64
+ if (looksLikeLangChain(value))
65
+ return "langchain";
66
+ if (looksLikeGeneric(value))
67
+ return "generic";
68
+ return "generic";
69
+ }
70
+ export { parseGeneric, parseJsonl, parseLangChain, parseOpenAI };
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parse/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Trace } from "../types.js";
2
+ export declare function splitJsonl(text: string): {
3
+ rows: unknown[];
4
+ warnings: string[];
5
+ };
6
+ export declare function parseJsonl(text: string, source?: string): Trace;
7
+ export declare function looksLikeJsonl(text: string): boolean;
8
+ //# sourceMappingURL=jsonl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../src/parse/jsonl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,aAAa,CAAC;AAOpD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAehF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CA8C/D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWpD"}
@@ -0,0 +1,85 @@
1
+ import { computeStats } from "../stats.js";
2
+ import { isRecord, tryJsonParse } from "../util.js";
3
+ import { normalizeEvent, reindex } from "./event.js";
4
+ import { looksLikeLangChain, parseLangChain } from "./langchain.js";
5
+ import { looksLikeOpenAI, parseOpenAI } from "./openai.js";
6
+ export function splitJsonl(text) {
7
+ const warnings = [];
8
+ const rows = [];
9
+ const lines = text.split(/\r?\n/);
10
+ for (let i = 0; i < lines.length; i += 1) {
11
+ const line = lines[i]?.trim();
12
+ if (!line || line.startsWith("//") || line.startsWith("#"))
13
+ continue;
14
+ const parsed = tryJsonParse(line);
15
+ if (parsed === undefined) {
16
+ warnings.push(`line ${i + 1}: skipped invalid JSON`);
17
+ continue;
18
+ }
19
+ rows.push(parsed);
20
+ }
21
+ return { rows, warnings };
22
+ }
23
+ export function parseJsonl(text, source) {
24
+ const { rows, warnings } = splitJsonl(text);
25
+ if (!rows.length) {
26
+ const trace = {
27
+ format: "jsonl",
28
+ steps: [],
29
+ stats: computeStats([]),
30
+ warnings: warnings.length ? warnings : ["jsonl parser found no events"],
31
+ };
32
+ if (source)
33
+ trace.source = source;
34
+ return trace;
35
+ }
36
+ if (looksLikeOpenAI(rows) && rows.some((row) => isRecord(row) && (row.delta != null || row.choices != null))) {
37
+ const nested = parseOpenAI(rows, source);
38
+ nested.format = "jsonl";
39
+ nested.warnings = [...warnings, ...nested.warnings];
40
+ return nested;
41
+ }
42
+ if (looksLikeLangChain(rows)) {
43
+ const nested = parseLangChain(rows, source);
44
+ nested.format = "jsonl";
45
+ nested.warnings = [...warnings, ...nested.warnings];
46
+ return nested;
47
+ }
48
+ if (looksLikeOpenAI(rows)) {
49
+ const nested = parseOpenAI(rows, source);
50
+ nested.format = "jsonl";
51
+ nested.warnings = [...warnings, ...nested.warnings];
52
+ return nested;
53
+ }
54
+ const steps = [];
55
+ for (const row of rows) {
56
+ const step = normalizeEvent(row, 0);
57
+ if (step)
58
+ steps.push(step);
59
+ }
60
+ const indexed = reindex(steps);
61
+ const trace = {
62
+ format: "jsonl",
63
+ steps: indexed,
64
+ stats: computeStats(indexed),
65
+ warnings,
66
+ };
67
+ if (source)
68
+ trace.source = source;
69
+ return trace;
70
+ }
71
+ export function looksLikeJsonl(text) {
72
+ const lines = text
73
+ .split(/\r?\n/)
74
+ .map((line) => line.trim())
75
+ .filter((line) => line && !line.startsWith("#") && !line.startsWith("//"));
76
+ if (lines.length < 2)
77
+ return false;
78
+ let ok = 0;
79
+ for (const line of lines.slice(0, 12)) {
80
+ if (tryJsonParse(line) !== undefined)
81
+ ok += 1;
82
+ }
83
+ return ok >= Math.min(2, lines.length) && ok >= Math.ceil(Math.min(lines.length, 12) * 0.6);
84
+ }
85
+ //# sourceMappingURL=jsonl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/parse/jsonl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Trace } from "../types.js";
2
+ export declare function parseLangChain(input: unknown, source?: string): Trace;
3
+ export declare function looksLikeLangChain(value: unknown): boolean;
4
+ //# sourceMappingURL=langchain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../src/parse/langchain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,aAAa,CAAC;AA+CpD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CA8BrE;AA4PD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAsB1D"}