@baguette-studios/kernl-telemetry 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/README.md +11 -0
- package/dist/delivery.d.ts +151 -0
- package/dist/delivery.d.ts.map +1 -0
- package/dist/delivery.js +237 -0
- package/dist/delivery.js.map +1 -0
- package/dist/index.d.ts +246 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +531 -0
- package/dist/index.js.map +1 -0
- package/dist/semantic.d.ts +53 -0
- package/dist/semantic.d.ts.map +1 -0
- package/dist/semantic.js +244 -0
- package/dist/semantic.js.map +1 -0
- package/dist/sinks.d.ts +114 -0
- package/dist/sinks.d.ts.map +1 -0
- package/dist/sinks.js +247 -0
- package/dist/sinks.js.map +1 -0
- package/package.json +41 -0
package/dist/semantic.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
const HEX_TRACE_ID_LENGTH = 32;
|
|
2
|
+
const HEX_SPAN_ID_LENGTH = 16;
|
|
3
|
+
const ZERO_TRACE_ID = "0".repeat(HEX_TRACE_ID_LENGTH);
|
|
4
|
+
const ZERO_SPAN_ID = "0".repeat(HEX_SPAN_ID_LENGTH);
|
|
5
|
+
export function isOtlpTraceId(value) {
|
|
6
|
+
return typeof value === "string" && /^[0-9a-f]{32}$/.test(value) && value !== ZERO_TRACE_ID;
|
|
7
|
+
}
|
|
8
|
+
export function isOtlpSpanId(value) {
|
|
9
|
+
return typeof value === "string" && /^[0-9a-f]{16}$/.test(value) && value !== ZERO_SPAN_ID;
|
|
10
|
+
}
|
|
11
|
+
export function toOtlpTraceId(value) {
|
|
12
|
+
return normalizeOtlpHexId(value, HEX_TRACE_ID_LENGTH);
|
|
13
|
+
}
|
|
14
|
+
export function toOtlpSpanId(value) {
|
|
15
|
+
return normalizeOtlpHexId(value, HEX_SPAN_ID_LENGTH);
|
|
16
|
+
}
|
|
17
|
+
export function coalesceTelemetrySpans(records) {
|
|
18
|
+
const groups = new Map();
|
|
19
|
+
for (const record of records) {
|
|
20
|
+
if (record.kind !== "span") {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const key = record.spanId ?? record.id;
|
|
24
|
+
groups.set(key, [...(groups.get(key) ?? []), record]);
|
|
25
|
+
}
|
|
26
|
+
return [...groups.values()]
|
|
27
|
+
.map(coalesceSpanGroup)
|
|
28
|
+
.sort((left, right) => left.startTimeUnixNano - right.startTimeUnixNano);
|
|
29
|
+
}
|
|
30
|
+
export function toOtlpTraceSpans(records) {
|
|
31
|
+
return coalesceTelemetrySpans(records).map((span) => compact({
|
|
32
|
+
traceId: toOtlpTraceId(span.traceId),
|
|
33
|
+
spanId: toOtlpSpanId(span.spanId),
|
|
34
|
+
parentSpanId: span.parentSpanId ? toOtlpSpanId(span.parentSpanId) : undefined,
|
|
35
|
+
name: span.name,
|
|
36
|
+
startTimeUnixNano: span.startTimeUnixNano,
|
|
37
|
+
endTimeUnixNano: span.endTimeUnixNano,
|
|
38
|
+
attributes: {
|
|
39
|
+
"kernl.span.kind": span.kind,
|
|
40
|
+
...span.attributes
|
|
41
|
+
},
|
|
42
|
+
status: otlpStatus(span.status, span.error)
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
export function toOpenInferenceSpans(records, options = {}) {
|
|
46
|
+
return toOtlpTraceSpans(records).map((span) => {
|
|
47
|
+
const kind = String(span.attributes["kernl.span.kind"] ?? "");
|
|
48
|
+
return {
|
|
49
|
+
...span,
|
|
50
|
+
profile: "openinference",
|
|
51
|
+
attributes: compact({
|
|
52
|
+
...span.attributes,
|
|
53
|
+
"openinference.span.kind": openInferenceKind(kind, span.name),
|
|
54
|
+
"input.value": contentPayload(findSourceSpan(records, span)?.input, options),
|
|
55
|
+
"output.value": contentPayload(findSourceSpan(records, span)?.output, options),
|
|
56
|
+
"llm.model_name": firstString(span.attributes.model, span.attributes.modelName, span.attributes["gen_ai.request.model"]),
|
|
57
|
+
"tool.name": firstString(span.attributes.toolName, span.attributes["tool.name"])
|
|
58
|
+
})
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export function toOtelGenAiSpans(records) {
|
|
63
|
+
return toOtlpTraceSpans(records).map((span) => {
|
|
64
|
+
const kind = String(span.attributes["kernl.span.kind"] ?? "");
|
|
65
|
+
return {
|
|
66
|
+
...span,
|
|
67
|
+
profile: "otel.gen_ai",
|
|
68
|
+
attributes: compact({
|
|
69
|
+
...span.attributes,
|
|
70
|
+
"gen_ai.operation.name": genAiOperationName(kind, span.name),
|
|
71
|
+
"gen_ai.provider.name": firstString(span.attributes.provider, span.attributes.modelProvider, span.attributes.system),
|
|
72
|
+
"gen_ai.request.model": firstString(span.attributes.model, span.attributes.modelName),
|
|
73
|
+
"gen_ai.usage.input_tokens": firstNumber(span.attributes.inputTokens, span.attributes.promptTokens),
|
|
74
|
+
"gen_ai.usage.output_tokens": firstNumber(span.attributes.outputTokens, span.attributes.completionTokens),
|
|
75
|
+
"tool.name": firstString(span.attributes.toolName, span.attributes["tool.name"])
|
|
76
|
+
})
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
export function extractLowCardinalityMetrics(records) {
|
|
81
|
+
const metrics = [];
|
|
82
|
+
for (const record of records) {
|
|
83
|
+
metrics.push({
|
|
84
|
+
name: "kernl.telemetry.records",
|
|
85
|
+
value: 1,
|
|
86
|
+
unit: "1",
|
|
87
|
+
attributes: compact({
|
|
88
|
+
kind: record.kind,
|
|
89
|
+
name: record.name,
|
|
90
|
+
status: record.status ?? "unset"
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
for (const span of coalesceTelemetrySpans(records)) {
|
|
95
|
+
if (span.endTimeUnixNano !== undefined) {
|
|
96
|
+
const explicitDurationMs = numericAttribute(span.attributes, "durationMs");
|
|
97
|
+
metrics.push({
|
|
98
|
+
name: "kernl.span.duration",
|
|
99
|
+
value: explicitDurationMs ?? (span.endTimeUnixNano - span.startTimeUnixNano) / 1_000_000,
|
|
100
|
+
unit: "ms",
|
|
101
|
+
attributes: compact({
|
|
102
|
+
span_kind: lowCardinalityString(span.kind),
|
|
103
|
+
status: span.status ?? "unset"
|
|
104
|
+
})
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return metrics;
|
|
109
|
+
}
|
|
110
|
+
function coalesceSpanGroup(records) {
|
|
111
|
+
const ordered = [...records].sort((left, right) => left.timestamp - right.timestamp);
|
|
112
|
+
const started = ordered.find((record) => record.name === "span.started") ?? ordered[0];
|
|
113
|
+
const ended = [...ordered].reverse().find((record) => record.name === "span.ended");
|
|
114
|
+
const last = ended ?? ordered[ordered.length - 1];
|
|
115
|
+
const attributes = compact({
|
|
116
|
+
...started.attributes,
|
|
117
|
+
...last.attributes,
|
|
118
|
+
"kernl.record.id": last.id,
|
|
119
|
+
"kernl.record.name": last.name,
|
|
120
|
+
"kernl.run.id": last.runId ?? started.runId,
|
|
121
|
+
"kernl.session.id": last.sessionId ?? started.sessionId
|
|
122
|
+
});
|
|
123
|
+
const name = String(attributes.spanName ?? started.attributes?.spanName ?? started.name);
|
|
124
|
+
const kind = firstString(attributes.spanKind, attributes["kernl.span.kind"]);
|
|
125
|
+
const startTimeUnixNano = started.timestamp * 1_000_000;
|
|
126
|
+
const endTimeUnixNano = ended ? ended.timestamp * 1_000_000 : undefined;
|
|
127
|
+
return compact({
|
|
128
|
+
traceId: last.traceId ?? started.traceId ?? last.runId ?? started.runId ?? last.id,
|
|
129
|
+
spanId: last.spanId ?? started.spanId ?? started.id,
|
|
130
|
+
parentSpanId: last.parentSpanId ?? started.parentSpanId,
|
|
131
|
+
name,
|
|
132
|
+
kind,
|
|
133
|
+
startTimeUnixNano,
|
|
134
|
+
endTimeUnixNano,
|
|
135
|
+
status: last.status ?? started.status,
|
|
136
|
+
attributes,
|
|
137
|
+
input: started.input,
|
|
138
|
+
output: ended?.output ?? last.output,
|
|
139
|
+
error: last.error ?? started.error,
|
|
140
|
+
records: ordered
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function normalizeOtlpHexId(value, length) {
|
|
144
|
+
const text = String(value ?? "");
|
|
145
|
+
const lowered = text.toLowerCase();
|
|
146
|
+
if (new RegExp(`^[0-9a-f]{${length}}$`).test(lowered) && !/^0+$/.test(lowered)) {
|
|
147
|
+
return lowered;
|
|
148
|
+
}
|
|
149
|
+
const hex = hashHex(text || "unknown", length);
|
|
150
|
+
return /^0+$/.test(hex) ? `1${hex.slice(1)}` : hex;
|
|
151
|
+
}
|
|
152
|
+
function hashHex(value, length) {
|
|
153
|
+
let output = "";
|
|
154
|
+
let seed = value;
|
|
155
|
+
while (output.length < length) {
|
|
156
|
+
output += fnv1a(seed).toString(16).padStart(8, "0");
|
|
157
|
+
seed = `${seed}:${output.length}`;
|
|
158
|
+
}
|
|
159
|
+
return output.slice(0, length);
|
|
160
|
+
}
|
|
161
|
+
function fnv1a(value) {
|
|
162
|
+
let hash = 2166136261;
|
|
163
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
164
|
+
hash ^= value.charCodeAt(index);
|
|
165
|
+
hash = Math.imul(hash, 16777619);
|
|
166
|
+
}
|
|
167
|
+
return hash >>> 0;
|
|
168
|
+
}
|
|
169
|
+
function otlpStatus(status, error) {
|
|
170
|
+
if (status === "ok") {
|
|
171
|
+
return { code: "STATUS_CODE_OK" };
|
|
172
|
+
}
|
|
173
|
+
if (status === "error") {
|
|
174
|
+
return compact({ code: "STATUS_CODE_ERROR", message: error });
|
|
175
|
+
}
|
|
176
|
+
return { code: "STATUS_CODE_UNSET" };
|
|
177
|
+
}
|
|
178
|
+
function openInferenceKind(kind, name) {
|
|
179
|
+
if (kind === "model.request") {
|
|
180
|
+
return "LLM";
|
|
181
|
+
}
|
|
182
|
+
if (kind === "tool.call") {
|
|
183
|
+
return "TOOL";
|
|
184
|
+
}
|
|
185
|
+
if (name === "memory.retrieval") {
|
|
186
|
+
return "RETRIEVER";
|
|
187
|
+
}
|
|
188
|
+
if (kind === "approval" || kind === "policy") {
|
|
189
|
+
return "GUARDRAIL";
|
|
190
|
+
}
|
|
191
|
+
if (kind === "eval") {
|
|
192
|
+
return "EVALUATOR";
|
|
193
|
+
}
|
|
194
|
+
if (kind === "agent.turn") {
|
|
195
|
+
return "AGENT";
|
|
196
|
+
}
|
|
197
|
+
return "CHAIN";
|
|
198
|
+
}
|
|
199
|
+
function genAiOperationName(kind, name) {
|
|
200
|
+
if (kind === "model.request") {
|
|
201
|
+
return "chat";
|
|
202
|
+
}
|
|
203
|
+
if (kind === "tool.call") {
|
|
204
|
+
return "execute_tool";
|
|
205
|
+
}
|
|
206
|
+
return name;
|
|
207
|
+
}
|
|
208
|
+
function numericAttribute(attributes, key) {
|
|
209
|
+
const value = attributes?.[key];
|
|
210
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
211
|
+
}
|
|
212
|
+
function firstString(...values) {
|
|
213
|
+
return values.find((value) => typeof value === "string" && value.length > 0);
|
|
214
|
+
}
|
|
215
|
+
function firstNumber(...values) {
|
|
216
|
+
return values.find((value) => typeof value === "number" && Number.isFinite(value));
|
|
217
|
+
}
|
|
218
|
+
function lowCardinalityString(value) {
|
|
219
|
+
return typeof value === "string" && /^[a-z0-9_.-]{1,64}$/i.test(value) ? value : "unknown";
|
|
220
|
+
}
|
|
221
|
+
function contentPayload(value, options) {
|
|
222
|
+
return options.contentMode === "inline" ? stringPayload(value) : undefined;
|
|
223
|
+
}
|
|
224
|
+
function stringPayload(value) {
|
|
225
|
+
if (value === undefined) {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
if (typeof value === "string") {
|
|
229
|
+
return value;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
return JSON.stringify(value);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return String(value);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function findSourceSpan(records, span) {
|
|
239
|
+
return coalesceTelemetrySpans(records).find((candidate) => toOtlpSpanId(candidate.spanId) === span.spanId);
|
|
240
|
+
}
|
|
241
|
+
function compact(value) {
|
|
242
|
+
return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=semantic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../src/semantic.ts"],"names":[],"mappings":"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"}
|
package/dist/sinks.d.ts
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { TelemetryExporter, TelemetryRecord, TelemetrySink } from "./index.js";
|
|
2
|
+
import { type OtlpTraceSpan, type SemanticContentMode, type SemanticProfileSpan } from "./semantic.js";
|
|
3
|
+
export type TelemetryFetch = (url: string, init: {
|
|
4
|
+
method: "POST";
|
|
5
|
+
headers: Record<string, string>;
|
|
6
|
+
body: string;
|
|
7
|
+
}) => Promise<{
|
|
8
|
+
ok: boolean;
|
|
9
|
+
status: number;
|
|
10
|
+
statusText?: string | undefined;
|
|
11
|
+
text?: (() => Promise<string>) | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export type OtlpHttpJsonTraceProfile = "otlp" | "openinference" | "otel.gen_ai";
|
|
14
|
+
export type OtlpHttpJsonTraceExporterOptions = {
|
|
15
|
+
url: string;
|
|
16
|
+
fetch?: TelemetryFetch | undefined;
|
|
17
|
+
headers?: Record<string, string> | undefined;
|
|
18
|
+
profile?: OtlpHttpJsonTraceProfile | undefined;
|
|
19
|
+
contentMode?: SemanticContentMode | undefined;
|
|
20
|
+
serviceName?: string | undefined;
|
|
21
|
+
resourceAttributes?: Record<string, unknown> | undefined;
|
|
22
|
+
scopeName?: string | undefined;
|
|
23
|
+
scopeVersion?: string | undefined;
|
|
24
|
+
};
|
|
25
|
+
export type PhoenixOtlpExporterOptions = Omit<OtlpHttpJsonTraceExporterOptions, "profile" | "url"> & {
|
|
26
|
+
url?: string | undefined;
|
|
27
|
+
};
|
|
28
|
+
export type OtlpHttpJsonTracesPayload = {
|
|
29
|
+
resourceSpans: readonly [
|
|
30
|
+
{
|
|
31
|
+
resource: {
|
|
32
|
+
attributes: readonly OtlpKeyValue[];
|
|
33
|
+
};
|
|
34
|
+
scopeSpans: readonly [
|
|
35
|
+
{
|
|
36
|
+
scope: {
|
|
37
|
+
name: string;
|
|
38
|
+
version?: string | undefined;
|
|
39
|
+
};
|
|
40
|
+
spans: readonly OtlpJsonSpan[];
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
};
|
|
46
|
+
export type OtlpJsonSpan = Omit<OtlpTraceSpan, "attributes"> & {
|
|
47
|
+
attributes: readonly OtlpKeyValue[];
|
|
48
|
+
};
|
|
49
|
+
export type OtlpKeyValue = {
|
|
50
|
+
key: string;
|
|
51
|
+
value: OtlpAnyValue;
|
|
52
|
+
};
|
|
53
|
+
export type OtlpAnyValue = {
|
|
54
|
+
stringValue: string;
|
|
55
|
+
} | {
|
|
56
|
+
intValue: string;
|
|
57
|
+
} | {
|
|
58
|
+
doubleValue: number;
|
|
59
|
+
} | {
|
|
60
|
+
boolValue: boolean;
|
|
61
|
+
} | {
|
|
62
|
+
arrayValue: {
|
|
63
|
+
values: readonly OtlpAnyValue[];
|
|
64
|
+
};
|
|
65
|
+
} | {
|
|
66
|
+
kvlistValue: {
|
|
67
|
+
values: readonly OtlpKeyValue[];
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
export type TelemetryLogRecord = {
|
|
71
|
+
id: string;
|
|
72
|
+
timestamp: number;
|
|
73
|
+
severityText: "INFO" | "ERROR";
|
|
74
|
+
body: string;
|
|
75
|
+
traceId?: string | undefined;
|
|
76
|
+
spanId?: string | undefined;
|
|
77
|
+
attributes: Record<string, unknown>;
|
|
78
|
+
};
|
|
79
|
+
export type LogsExporterOptions = {
|
|
80
|
+
includeKinds?: readonly ("audit" | "analytics" | "error")[] | undefined;
|
|
81
|
+
};
|
|
82
|
+
export type LangfuseNativePayload = {
|
|
83
|
+
type: "score";
|
|
84
|
+
payload: {
|
|
85
|
+
id: string;
|
|
86
|
+
traceId?: string | undefined;
|
|
87
|
+
observationId?: string | undefined;
|
|
88
|
+
name: string;
|
|
89
|
+
value: number;
|
|
90
|
+
dataType: "NUMERIC";
|
|
91
|
+
comment?: string | undefined;
|
|
92
|
+
metadata: Record<string, unknown>;
|
|
93
|
+
};
|
|
94
|
+
} | {
|
|
95
|
+
type: "event";
|
|
96
|
+
payload: {
|
|
97
|
+
id: string;
|
|
98
|
+
timestamp: string;
|
|
99
|
+
traceId?: string | undefined;
|
|
100
|
+
sessionId?: string | undefined;
|
|
101
|
+
name: string;
|
|
102
|
+
metadata: Record<string, unknown>;
|
|
103
|
+
input?: unknown;
|
|
104
|
+
output?: unknown;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
export declare function createOtlpHttpJsonTraceExporter(options: OtlpHttpJsonTraceExporterOptions): TelemetryExporter;
|
|
108
|
+
export declare function createPhoenixOtlpExporter(options?: PhoenixOtlpExporterOptions): TelemetryExporter;
|
|
109
|
+
export declare function createOtlpHttpJsonTracesPayload(spans: readonly (OtlpTraceSpan | SemanticProfileSpan)[], options?: Pick<OtlpHttpJsonTraceExporterOptions, "resourceAttributes" | "scopeName" | "scopeVersion" | "serviceName">): OtlpHttpJsonTracesPayload;
|
|
110
|
+
export declare function mapTelemetryLogs(records: readonly TelemetryRecord[], options?: LogsExporterOptions): TelemetryLogRecord[];
|
|
111
|
+
export declare function createLogsExporter(sink: TelemetrySink<TelemetryLogRecord>, options?: LogsExporterOptions): TelemetryExporter;
|
|
112
|
+
export declare function mapLangfuseNativePayloads(records: readonly TelemetryRecord[]): LangfuseNativePayload[];
|
|
113
|
+
export declare function createLangfuseNativeExporter(sink: TelemetrySink<LangfuseNativePayload>): TelemetryExporter;
|
|
114
|
+
//# sourceMappingURL=sinks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sinks.d.ts","sourceRoot":"","sources":["../src/sinks.ts"],"names":[],"mappings":"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"}
|
package/dist/sinks.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { toOpenInferenceSpans, toOtelGenAiSpans, toOtlpTraceSpans } from "./semantic.js";
|
|
2
|
+
export function createOtlpHttpJsonTraceExporter(options) {
|
|
3
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
4
|
+
if (!fetchImpl) {
|
|
5
|
+
throw new Error("createOtlpHttpJsonTraceExporter requires fetch in this runtime.");
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
async export(records) {
|
|
9
|
+
const spans = mapTraceSpans(records, options);
|
|
10
|
+
if (spans.length === 0) {
|
|
11
|
+
return { status: "success", exported: 0, failed: 0 };
|
|
12
|
+
}
|
|
13
|
+
const payload = createOtlpHttpJsonTracesPayload(spans, options);
|
|
14
|
+
try {
|
|
15
|
+
const response = await fetchImpl(options.url, {
|
|
16
|
+
method: "POST",
|
|
17
|
+
headers: {
|
|
18
|
+
"content-type": "application/json",
|
|
19
|
+
...options.headers
|
|
20
|
+
},
|
|
21
|
+
body: JSON.stringify(payload)
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
const detail = response.text ? await response.text().catch(() => "") : "";
|
|
25
|
+
return {
|
|
26
|
+
status: "error",
|
|
27
|
+
exported: 0,
|
|
28
|
+
failed: spans.length,
|
|
29
|
+
errors: [`HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : ""}${detail ? `: ${detail}` : ""}`]
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return { status: "success", exported: spans.length, failed: 0 };
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return {
|
|
36
|
+
status: "error",
|
|
37
|
+
exported: 0,
|
|
38
|
+
failed: spans.length,
|
|
39
|
+
errors: [error instanceof Error ? error.message : String(error)]
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function createPhoenixOtlpExporter(options = {}) {
|
|
46
|
+
return createOtlpHttpJsonTraceExporter({
|
|
47
|
+
...options,
|
|
48
|
+
url: options.url ?? "http://127.0.0.1:6006/v1/traces",
|
|
49
|
+
profile: "openinference",
|
|
50
|
+
contentMode: options.contentMode ?? "none",
|
|
51
|
+
serviceName: options.serviceName ?? "kernl"
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
export function createOtlpHttpJsonTracesPayload(spans, options = {}) {
|
|
55
|
+
return {
|
|
56
|
+
resourceSpans: [
|
|
57
|
+
{
|
|
58
|
+
resource: {
|
|
59
|
+
attributes: toOtlpAttributes({
|
|
60
|
+
"service.name": options.serviceName ?? "kernl",
|
|
61
|
+
...options.resourceAttributes
|
|
62
|
+
})
|
|
63
|
+
},
|
|
64
|
+
scopeSpans: [
|
|
65
|
+
{
|
|
66
|
+
scope: compact({
|
|
67
|
+
name: options.scopeName ?? "kernl.telemetry",
|
|
68
|
+
version: options.scopeVersion
|
|
69
|
+
}),
|
|
70
|
+
spans: spans.map((span) => ({
|
|
71
|
+
...span,
|
|
72
|
+
attributes: toOtlpAttributes(span.attributes)
|
|
73
|
+
}))
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function mapTelemetryLogs(records, options = {}) {
|
|
81
|
+
const includeKinds = new Set(options.includeKinds ?? ["audit", "analytics", "error"]);
|
|
82
|
+
return records.flatMap((record) => {
|
|
83
|
+
const selectedKind = record.kind === "audit" || record.kind === "analytics" || record.status === "error";
|
|
84
|
+
if (!selectedKind) {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
const logicalKind = record.status === "error" ? "error" : record.kind;
|
|
88
|
+
if (!includeKinds.has(logicalKind)) {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
return [
|
|
92
|
+
compact({
|
|
93
|
+
id: record.id,
|
|
94
|
+
timestamp: record.timestamp,
|
|
95
|
+
severityText: record.status === "error" ? "ERROR" : "INFO",
|
|
96
|
+
body: record.error ?? String(record.attributes?.eventName ?? record.attributes?.auditType ?? record.name),
|
|
97
|
+
traceId: record.traceId,
|
|
98
|
+
spanId: record.spanId,
|
|
99
|
+
attributes: compact({
|
|
100
|
+
"kernl.kind": record.kind,
|
|
101
|
+
"kernl.name": record.name,
|
|
102
|
+
"kernl.status": record.status,
|
|
103
|
+
"kernl.session_id": record.sessionId,
|
|
104
|
+
"kernl.run_id": record.runId,
|
|
105
|
+
...record.attributes
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
];
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
export function createLogsExporter(sink, options = {}) {
|
|
112
|
+
return {
|
|
113
|
+
async export(records) {
|
|
114
|
+
return exportPayloads(mapTelemetryLogs(records, options), sink);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export function mapLangfuseNativePayloads(records) {
|
|
119
|
+
return records.flatMap((record) => {
|
|
120
|
+
if (record.name === "eval.scored") {
|
|
121
|
+
const score = numberAttribute(record, "score");
|
|
122
|
+
if (score === undefined) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
return [
|
|
126
|
+
{
|
|
127
|
+
type: "score",
|
|
128
|
+
payload: compact({
|
|
129
|
+
id: record.id,
|
|
130
|
+
traceId: record.traceId,
|
|
131
|
+
observationId: record.spanId,
|
|
132
|
+
name: stringAttribute(record, "label") ?? stringAttribute(record, "rubricId") ?? "eval.score",
|
|
133
|
+
value: score,
|
|
134
|
+
dataType: "NUMERIC",
|
|
135
|
+
comment: stringAttribute(record, "reason"),
|
|
136
|
+
metadata: compact({
|
|
137
|
+
kind: record.kind,
|
|
138
|
+
status: record.status,
|
|
139
|
+
rubricId: record.attributes?.rubricId,
|
|
140
|
+
maxScore: record.attributes?.maxScore,
|
|
141
|
+
passed: record.attributes?.passed,
|
|
142
|
+
...record.attributes
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
}
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
const eventName = stringAttribute(record, "eventName");
|
|
149
|
+
if (record.kind === "analytics" && eventName && (eventName.startsWith("feedback.") || eventName.startsWith("dataset."))) {
|
|
150
|
+
return [
|
|
151
|
+
{
|
|
152
|
+
type: "event",
|
|
153
|
+
payload: compact({
|
|
154
|
+
id: record.id,
|
|
155
|
+
timestamp: new Date(record.timestamp).toISOString(),
|
|
156
|
+
traceId: record.traceId,
|
|
157
|
+
sessionId: record.sessionId,
|
|
158
|
+
name: eventName,
|
|
159
|
+
metadata: compact({
|
|
160
|
+
kind: record.kind,
|
|
161
|
+
status: record.status,
|
|
162
|
+
...record.attributes
|
|
163
|
+
}),
|
|
164
|
+
input: record.input,
|
|
165
|
+
output: record.output
|
|
166
|
+
})
|
|
167
|
+
}
|
|
168
|
+
];
|
|
169
|
+
}
|
|
170
|
+
return [];
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
export function createLangfuseNativeExporter(sink) {
|
|
174
|
+
return {
|
|
175
|
+
async export(records) {
|
|
176
|
+
return exportPayloads(mapLangfuseNativePayloads(records), sink);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function mapTraceSpans(records, options) {
|
|
181
|
+
if (options.profile === "openinference") {
|
|
182
|
+
return toOpenInferenceSpans(records, { contentMode: options.contentMode });
|
|
183
|
+
}
|
|
184
|
+
if (options.profile === "otel.gen_ai") {
|
|
185
|
+
return toOtelGenAiSpans(records);
|
|
186
|
+
}
|
|
187
|
+
return toOtlpTraceSpans(records);
|
|
188
|
+
}
|
|
189
|
+
function toOtlpAttributes(attributes) {
|
|
190
|
+
return Object.entries(attributes)
|
|
191
|
+
.filter(([, value]) => value !== undefined)
|
|
192
|
+
.map(([key, value]) => ({ key, value: toOtlpAnyValue(value) }));
|
|
193
|
+
}
|
|
194
|
+
function toOtlpAnyValue(value) {
|
|
195
|
+
if (typeof value === "boolean") {
|
|
196
|
+
return { boolValue: value };
|
|
197
|
+
}
|
|
198
|
+
if (typeof value === "number") {
|
|
199
|
+
return Number.isInteger(value) ? { intValue: String(value) } : { doubleValue: value };
|
|
200
|
+
}
|
|
201
|
+
if (Array.isArray(value)) {
|
|
202
|
+
return { arrayValue: { values: value.map(toOtlpAnyValue) } };
|
|
203
|
+
}
|
|
204
|
+
if (value && typeof value === "object") {
|
|
205
|
+
return {
|
|
206
|
+
kvlistValue: {
|
|
207
|
+
values: Object.entries(value).map(([key, entry]) => ({
|
|
208
|
+
key,
|
|
209
|
+
value: toOtlpAnyValue(entry)
|
|
210
|
+
}))
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
return { stringValue: value === undefined || value === null ? "" : String(value) };
|
|
215
|
+
}
|
|
216
|
+
async function exportPayloads(payloads, sink) {
|
|
217
|
+
let exported = 0;
|
|
218
|
+
const errors = [];
|
|
219
|
+
for (const payload of payloads) {
|
|
220
|
+
try {
|
|
221
|
+
await sink(payload);
|
|
222
|
+
exported += 1;
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
errors.push(error instanceof Error ? error.message : String(error));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const failed = payloads.length - exported;
|
|
229
|
+
return {
|
|
230
|
+
status: failed === 0 ? "success" : exported > 0 ? "partial" : "error",
|
|
231
|
+
exported,
|
|
232
|
+
failed,
|
|
233
|
+
...(errors.length ? { errors } : {})
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function stringAttribute(record, key) {
|
|
237
|
+
const value = record.attributes?.[key];
|
|
238
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
239
|
+
}
|
|
240
|
+
function numberAttribute(record, key) {
|
|
241
|
+
const value = record.attributes?.[key];
|
|
242
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
243
|
+
}
|
|
244
|
+
function compact(input) {
|
|
245
|
+
return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined));
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=sinks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sinks.js","sourceRoot":"","sources":["../src/sinks.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AA2GvB,MAAM,UAAU,+BAA+B,CAAC,OAAyC;IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IACpD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACvD,CAAC;YAED,MAAM,OAAO,GAAG,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAChE,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;oBAC5C,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,GAAG,OAAO,CAAC,OAAO;qBACnB;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1E,OAAO;wBACL,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,CAAC;wBACX,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,MAAM,EAAE,CAAC,QAAQ,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;qBACzH,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAClE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,CAAC;oBACX,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACjE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAsC,EAAE;IAChF,OAAO,+BAA+B,CAAC;QACrC,GAAG,OAAO;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,iCAAiC;QACrD,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,MAAM;QAC1C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,KAAuD,EACvD,UAAuH,EAAE;IAEzH,OAAO;QACL,aAAa,EAAE;YACb;gBACE,QAAQ,EAAE;oBACR,UAAU,EAAE,gBAAgB,CAAC;wBAC3B,cAAc,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO;wBAC9C,GAAG,OAAO,CAAC,kBAAkB;qBAC9B,CAAC;iBACH;gBACD,UAAU,EAAE;oBACV;wBACE,KAAK,EAAE,OAAO,CAAC;4BACb,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,iBAAiB;4BAC5C,OAAO,EAAE,OAAO,CAAC,YAAY;yBAC9B,CAAC;wBACF,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;4BAC1B,GAAG,IAAI;4BACP,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;yBAC9C,CAAC,CAAC;qBACJ;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAmC,EAAE,UAA+B,EAAE;IACrG,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IACtF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAChC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC;QACzG,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACtE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAA8C,CAAC,EAAE,CAAC;YACtE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO;YACL,OAAO,CAAC;gBACN,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBAC1D,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC;gBACzG,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,OAAO,CAAC;oBAClB,YAAY,EAAE,MAAM,CAAC,IAAI;oBACzB,YAAY,EAAE,MAAM,CAAC,IAAI;oBACzB,cAAc,EAAE,MAAM,CAAC,MAAM;oBAC7B,kBAAkB,EAAE,MAAM,CAAC,SAAS;oBACpC,cAAc,EAAE,MAAM,CAAC,KAAK;oBAC5B,GAAG,MAAM,CAAC,UAAU;iBACrB,CAAC;aACH,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAuC,EACvC,UAA+B,EAAE;IAEjC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,OAAO,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAmC;IAC3E,OAAO,OAAO,CAAC,OAAO,CAAwB,CAAC,MAAM,EAAE,EAAE;QACvD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO;gBACL;oBACE,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,OAAO,CAAC;wBACf,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,aAAa,EAAE,MAAM,CAAC,MAAM;wBAC5B,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,YAAY;wBAC7F,KAAK,EAAE,KAAK;wBACZ,QAAQ,EAAE,SAAkB;wBAC5B,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC;wBAC1C,QAAQ,EAAE,OAAO,CAAC;4BAChB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ;4BACrC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ;4BACrC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM;4BACjC,GAAG,MAAM,CAAC,UAAU;yBACrB,CAAC;qBACH,CAAC;iBACH;aACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACxH,OAAO;gBACL;oBACE,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,OAAO,CAAC;wBACf,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;wBACnD,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,IAAI,EAAE,SAAS;wBACf,QAAQ,EAAE,OAAO,CAAC;4BAChB,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,GAAG,MAAM,CAAC,UAAU;yBACrB,CAAC;wBACF,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;qBACtB,CAAC;iBACH;aACF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAA0C;IACrF,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,OAAO,cAAc,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,OAAmC,EACnC,OAA0E;IAE1E,IAAI,OAAO,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;QACxC,OAAO,oBAAoB,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QACtC,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAmC;IAC3D,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO;YACL,WAAW,EAAE;gBACX,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC9E,GAAG;oBACH,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;iBAC7B,CAAC,CAAC;aACJ;SACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,QAA6B,EAC7B,IAA6B;IAE7B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC1C,OAAO;QACL,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACrE,QAAQ;QACR,MAAM;QACN,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB,EAAE,GAAW;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB,EAAE,GAAW;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAED,SAAS,OAAO,CAAoC,KAAQ;IAC1D,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAM,CAAC;AACnG,CAAC"}
|