@arizeai/openinference-instrumentation-openai 0.0.2 → 0.0.4
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/README.md +2 -2
- package/dist/esm/instrumentation.d.ts.map +1 -1
- package/dist/esm/instrumentation.js +107 -10
- package/dist/esm/instrumentation.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esnext/instrumentation.d.ts.map +1 -1
- package/dist/esnext/instrumentation.js +102 -10
- package/dist/esnext/instrumentation.js.map +1 -1
- package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
- package/dist/esnext/version.d.ts +1 -1
- package/dist/esnext/version.js +1 -1
- package/dist/src/instrumentation.d.ts.map +1 -1
- package/dist/src/instrumentation.js +102 -10
- package/dist/src/instrumentation.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/test/openai.test.js +46 -15
- package/dist/test/openai.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -2
- package/src/instrumentation.ts +297 -166
- package/src/version.ts +1 -1
|
@@ -30,14 +30,17 @@ export class OpenAIInstrumentation extends InstrumentationBase {
|
|
|
30
30
|
if (module === null || module === void 0 ? void 0 : module.openInferencePatched) {
|
|
31
31
|
return module;
|
|
32
32
|
}
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
33
34
|
const instrumentation = this;
|
|
34
35
|
// Patch create chat completions
|
|
35
|
-
this._wrap(module.OpenAI.Chat.Completions.prototype, "create",
|
|
36
|
+
this._wrap(module.OpenAI.Chat.Completions.prototype, "create",
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
(original) => {
|
|
36
39
|
return function patchedCreate(...args) {
|
|
37
40
|
const body = args[0];
|
|
38
|
-
const { messages } = body, invocationParameters = __rest(body, ["messages"]);
|
|
41
|
+
const { messages: _messages } = body, invocationParameters = __rest(body, ["messages"]);
|
|
39
42
|
const span = instrumentation.tracer.startSpan(`OpenAI Chat Completions`, {
|
|
40
|
-
kind: SpanKind.
|
|
43
|
+
kind: SpanKind.INTERNAL,
|
|
41
44
|
attributes: Object.assign({ [SemanticConventions.OPENINFERENCE_SPAN_KIND]: OpenInferenceSpanKind.LLM, [SemanticConventions.LLM_MODEL_NAME]: body.model, [SemanticConventions.INPUT_VALUE]: JSON.stringify(body), [SemanticConventions.INPUT_MIME_TYPE]: MimeType.JSON, [SemanticConventions.LLM_INVOCATION_PARAMETERS]: JSON.stringify(invocationParameters) }, getLLMInputMessagesAttributes(body)),
|
|
42
45
|
});
|
|
43
46
|
const execContext = trace.setSpan(context.active(), span);
|
|
@@ -49,12 +52,64 @@ export class OpenAIInstrumentation extends InstrumentationBase {
|
|
|
49
52
|
// Push the error to the span
|
|
50
53
|
if (error) {
|
|
51
54
|
span.recordException(error);
|
|
55
|
+
span.setStatus({
|
|
56
|
+
code: SpanStatusCode.ERROR,
|
|
57
|
+
message: error.message,
|
|
58
|
+
});
|
|
59
|
+
span.end();
|
|
52
60
|
}
|
|
53
61
|
});
|
|
54
62
|
const wrappedPromise = execPromise.then((result) => {
|
|
55
63
|
if (result) {
|
|
56
64
|
// Record the results
|
|
57
|
-
span.setAttributes(Object.assign(Object.assign({ [SemanticConventions.OUTPUT_VALUE]: JSON.stringify(result), [SemanticConventions.OUTPUT_MIME_TYPE]: MimeType.JSON
|
|
65
|
+
span.setAttributes(Object.assign(Object.assign({ [SemanticConventions.OUTPUT_VALUE]: JSON.stringify(result), [SemanticConventions.OUTPUT_MIME_TYPE]: MimeType.JSON,
|
|
66
|
+
// Override the model from the value sent by the server
|
|
67
|
+
[SemanticConventions.LLM_MODEL_NAME]: isChatCompletionResponse(result)
|
|
68
|
+
? result.model
|
|
69
|
+
: body.model }, getLLMOutputMessagesAttributes(result)), getUsageAttributes(result)));
|
|
70
|
+
}
|
|
71
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
72
|
+
span.end();
|
|
73
|
+
return result;
|
|
74
|
+
});
|
|
75
|
+
return context.bind(execContext, wrappedPromise);
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
this._wrap(module.OpenAI.Embeddings.prototype, "create",
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
|
+
(original) => {
|
|
81
|
+
return function patchedEmbeddingCreate(...args) {
|
|
82
|
+
const body = args[0];
|
|
83
|
+
const { input } = body;
|
|
84
|
+
const isStringInput = typeof input == "string";
|
|
85
|
+
const span = instrumentation.tracer.startSpan(`OpenAI Embeddings`, {
|
|
86
|
+
kind: SpanKind.INTERNAL,
|
|
87
|
+
attributes: Object.assign({ [SemanticConventions.OPENINFERENCE_SPAN_KIND]: OpenInferenceSpanKind.EMBEDDING, [SemanticConventions.EMBEDDING_MODEL_NAME]: body.model, [SemanticConventions.INPUT_VALUE]: isStringInput
|
|
88
|
+
? input
|
|
89
|
+
: JSON.stringify(input), [SemanticConventions.INPUT_MIME_TYPE]: isStringInput
|
|
90
|
+
? MimeType.TEXT
|
|
91
|
+
: MimeType.JSON }, getEmbeddingTextAttributes(body)),
|
|
92
|
+
});
|
|
93
|
+
const execContext = trace.setSpan(context.active(), span);
|
|
94
|
+
const execPromise = safeExecuteInTheMiddle(() => {
|
|
95
|
+
return context.with(execContext, () => {
|
|
96
|
+
return original.apply(this, args);
|
|
97
|
+
});
|
|
98
|
+
}, (error) => {
|
|
99
|
+
// Push the error to the span
|
|
100
|
+
if (error) {
|
|
101
|
+
span.recordException(error);
|
|
102
|
+
span.setStatus({
|
|
103
|
+
code: SpanStatusCode.ERROR,
|
|
104
|
+
message: error.message,
|
|
105
|
+
});
|
|
106
|
+
span.end();
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
const wrappedPromise = execPromise.then((result) => {
|
|
110
|
+
if (result) {
|
|
111
|
+
// Record the results
|
|
112
|
+
span.setAttributes(Object.assign({}, getEmbeddingEmbeddingsAttributes(result)));
|
|
58
113
|
}
|
|
59
114
|
span.setStatus({ code: SpanStatusCode.OK });
|
|
60
115
|
span.end();
|
|
@@ -72,8 +127,15 @@ export class OpenAIInstrumentation extends InstrumentationBase {
|
|
|
72
127
|
unpatch(moduleExports, moduleVersion) {
|
|
73
128
|
diag.debug(`Removing patch for ${MODULE_NAME}@${moduleVersion}`);
|
|
74
129
|
this._unwrap(moduleExports.OpenAI.Chat.Completions.prototype, "create");
|
|
130
|
+
this._unwrap(moduleExports.OpenAI.Embeddings.prototype, "create");
|
|
75
131
|
}
|
|
76
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* type-guard that checks if the response is a chat completion response
|
|
135
|
+
*/
|
|
136
|
+
function isChatCompletionResponse(response) {
|
|
137
|
+
return "choices" in response;
|
|
138
|
+
}
|
|
77
139
|
/**
|
|
78
140
|
* Converts the body of the request to LLM input messages
|
|
79
141
|
*/
|
|
@@ -89,7 +151,7 @@ function getLLMInputMessagesAttributes(body) {
|
|
|
89
151
|
* Get Usage attributes
|
|
90
152
|
*/
|
|
91
153
|
function getUsageAttributes(response) {
|
|
92
|
-
if (
|
|
154
|
+
if (Object.prototype.hasOwnProperty.call(response, "usage")) {
|
|
93
155
|
const completion = response;
|
|
94
156
|
if (completion.usage) {
|
|
95
157
|
return {
|
|
@@ -106,7 +168,7 @@ function getUsageAttributes(response) {
|
|
|
106
168
|
*/
|
|
107
169
|
function getLLMOutputMessagesAttributes(response) {
|
|
108
170
|
// Handle chat completion
|
|
109
|
-
if (
|
|
171
|
+
if (Object.prototype.hasOwnProperty.call(response, "choices")) {
|
|
110
172
|
const completion = response;
|
|
111
173
|
// Right now support just the first choice
|
|
112
174
|
const choice = completion.choices[0];
|
|
@@ -115,13 +177,43 @@ function getLLMOutputMessagesAttributes(response) {
|
|
|
115
177
|
}
|
|
116
178
|
return [choice.message].reduce((acc, message, index) => {
|
|
117
179
|
const index_prefix = `${SemanticConventions.LLM_OUTPUT_MESSAGES}.${index}`;
|
|
118
|
-
acc[`${index_prefix}.${SemanticConventions.MESSAGE_CONTENT}`] =
|
|
119
|
-
|
|
120
|
-
acc
|
|
121
|
-
|
|
180
|
+
acc[`${index_prefix}.${SemanticConventions.MESSAGE_CONTENT}`] = String(message.content);
|
|
181
|
+
acc[`${index_prefix}.${SemanticConventions.MESSAGE_ROLE}`] = message.role;
|
|
182
|
+
return acc;
|
|
183
|
+
}, {});
|
|
184
|
+
}
|
|
185
|
+
return {};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Converts the embedding result payload to embedding attributes
|
|
189
|
+
*/
|
|
190
|
+
function getEmbeddingTextAttributes(request) {
|
|
191
|
+
if (typeof request.input == "string") {
|
|
192
|
+
return {
|
|
193
|
+
[`${SemanticConventions.EMBEDDING_EMBEDDINGS}.0.${SemanticConventions.EMBEDDING_TEXT}`]: request.input,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
else if (Array.isArray(request.input) &&
|
|
197
|
+
request.input.length > 0 &&
|
|
198
|
+
typeof request.input[0] == "string") {
|
|
199
|
+
return request.input.reduce((acc, input, index) => {
|
|
200
|
+
const index_prefix = `${SemanticConventions.EMBEDDING_EMBEDDINGS}.${index}`;
|
|
201
|
+
acc[`${index_prefix}.${SemanticConventions.EMBEDDING_TEXT}`] = input;
|
|
122
202
|
return acc;
|
|
123
203
|
}, {});
|
|
124
204
|
}
|
|
205
|
+
// Ignore other cases where input is a number or an array of numbers
|
|
125
206
|
return {};
|
|
126
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Converts the embedding result payload to embedding attributes
|
|
210
|
+
*/
|
|
211
|
+
function getEmbeddingEmbeddingsAttributes(response) {
|
|
212
|
+
return response.data.reduce((acc, embedding, index) => {
|
|
213
|
+
const index_prefix = `${SemanticConventions.EMBEDDING_EMBEDDINGS}.${index}`;
|
|
214
|
+
acc[`${index_prefix}.${SemanticConventions.EMBEDDING_VECTOR}`] =
|
|
215
|
+
embedding.embedding;
|
|
216
|
+
return acc;
|
|
217
|
+
}, {});
|
|
218
|
+
}
|
|
127
219
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EACL,mBAAmB,EAGnB,mCAAmC,EACnC,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EAER,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,QAAQ,GACT,MAAM,6CAA6C,CAAC;AAYrD,MAAM,WAAW,GAAG,QAAQ,CAAC;AAE7B,MAAM,OAAO,qBAAsB,SAAQ,mBAAkC;IAC3E,YAAY,MAA8B;QACxC,KAAK,CACH,+CAA+C,EAC/C,OAAO,EACP,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAC1B,CAAC;IACJ,CAAC;IAES,IAAI;QACZ,MAAM,MAAM,GAAG,IAAI,mCAAmC,CACpD,QAAQ,EACR,CAAC,QAAQ,CAAC,EACV,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CACxB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;OAEG;IACK,KAAK,CACX,MAA0D,EAC1D,aAAsB;QAEtB,IAAI,CAAC,KAAK,CAAC,sBAAsB,WAAW,IAAI,aAAa,EAAE,CAAC,CAAC;QACjE,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,oBAAoB,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,4DAA4D;QAC5D,MAAM,eAAe,GAA0B,IAAI,CAAC;QAIpD,gCAAgC;QAChC,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EACxC,QAAQ;QACR,8DAA8D;QAC9D,CAAC,QAA8B,EAAO,EAAE;YACtC,OAAO,SAAS,aAAa,CAE3B,GAAG,IAEF;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,QAAQ,EAAE,SAAS,KAA8B,IAAI,EAA7B,oBAAoB,UAAK,IAAI,EAAvD,YAAgD,CAAO,CAAC;gBAC9D,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAC3C,yBAAyB,EACzB;oBACE,IAAI,EAAE,QAAQ,CAAC,QAAQ;oBACvB,UAAU,kBACR,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,EAC3C,qBAAqB,CAAC,GAAG,EAC3B,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,KAAK,EAChD,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EACvD,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,IAAI,EACpD,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,EAC7C,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IACnC,6BAA6B,CAAC,IAAI,CAAC,CACvC;iBACF,CACF,CAAC;gBACF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,sBAAsB,CAGxC,GAAG,EAAE;oBACH,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;wBACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACL,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;oBACR,6BAA6B;oBAC7B,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;wBAC5B,IAAI,CAAC,SAAS,CAAC;4BACb,IAAI,EAAE,cAAc,CAAC,KAAK;4BAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;yBACvB,CAAC,CAAC;wBACH,IAAI,CAAC,GAAG,EAAE,CAAC;oBACb,CAAC;gBACH,CAAC,CACF,CAAC;gBACF,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBACjD,IAAI,MAAM,EAAE,CAAC;wBACX,qBAAqB;wBACrB,IAAI,CAAC,aAAa,+BAChB,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAC1D,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,IAAI;4BACrD,uDAAuD;4BACvD,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,wBAAwB,CAC5D,MAAM,CACP;gCACC,CAAC,CAAC,MAAM,CAAC,KAAK;gCACd,CAAC,CAAC,IAAI,CAAC,KAAK,IACX,8BAA8B,CAAC,MAAM,CAAC,GACtC,kBAAkB,CAAC,MAAM,CAAC,EAC7B,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;oBACX,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACnD,CAAC,CAAC;QACJ,CAAC,CACF,CAAC;QAKF,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAClC,QAAQ;QACR,8DAA8D;QAC9D,CAAC,QAA8B,EAAO,EAAE;YACtC,OAAO,SAAS,sBAAsB,CAEpC,GAAG,IAAkE;gBAErE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;gBACvB,MAAM,aAAa,GAAG,OAAO,KAAK,IAAI,QAAQ,CAAC;gBAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE;oBACjE,IAAI,EAAE,QAAQ,CAAC,QAAQ;oBACvB,UAAU,kBACR,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,EAC3C,qBAAqB,CAAC,SAAS,EACjC,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,KAAK,EACtD,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,aAAa;4BAC9C,CAAC,CAAC,KAAK;4BACP,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EACzB,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE,aAAa;4BAClD,CAAC,CAAC,QAAQ,CAAC,IAAI;4BACf,CAAC,CAAC,QAAQ,CAAC,IAAI,IACd,0BAA0B,CAAC,IAAI,CAAC,CACpC;iBACF,CAAC,CAAC;gBACH,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,sBAAsB,CAGxC,GAAG,EAAE;oBACH,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;wBACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACL,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;oBACR,6BAA6B;oBAC7B,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;wBAC5B,IAAI,CAAC,SAAS,CAAC;4BACb,IAAI,EAAE,cAAc,CAAC,KAAK;4BAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;yBACvB,CAAC,CAAC;wBACH,IAAI,CAAC,GAAG,EAAE,CAAC;oBACb,CAAC;gBACH,CAAC,CACF,CAAC;gBACF,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBACjD,IAAI,MAAM,EAAE,CAAC;wBACX,qBAAqB;wBACrB,IAAI,CAAC,aAAa,mBAEb,gCAAgC,CAAC,MAAM,CAAC,EAC3C,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;oBACX,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACnD,CAAC,CAAC;QACJ,CAAC,CACF,CAAC;QAEF,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;OAEG;IACK,OAAO,CAAC,aAA4B,EAAE,aAAsB;QAClE,IAAI,CAAC,KAAK,CAAC,sBAAsB,WAAW,IAAI,aAAa,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;CACF;AAED;;GAEG;AACH,SAAS,wBAAwB,CAC/B,QAAsD;IAEtD,OAAO,SAAS,IAAI,QAAQ,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CACpC,IAAoC;IAEpC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,YAAY,GAAG,GAAG,mBAAmB,CAAC,kBAAkB,IAAI,KAAK,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,YAAY,IAAI,mBAAmB,CAAC,eAAe,EAAE,CAAC,GAAG,MAAM,CACpE,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,GAAG,CAAC,GAAG,YAAY,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,GAAG,MAAM,CACjE,OAAO,CAAC,IAAI,CACb,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAgB,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,QAAsD;IAEtD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QAC5D,MAAM,UAAU,GAAG,QAA0B,CAAC;QAC9C,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO;gBACL,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,EAC9C,UAAU,CAAC,KAAK,CAAC,iBAAiB;gBACpC,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,EAC1C,UAAU,CAAC,KAAK,CAAC,aAAa;gBAChC,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,EACzC,UAAU,CAAC,KAAK,CAAC,YAAY;aAChC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,8BAA8B,CACrC,QAAsD;IAEtD,yBAAyB;IACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,QAA0B,CAAC;QAC9C,0CAA0C;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACrD,MAAM,YAAY,GAAG,GAAG,mBAAmB,CAAC,mBAAmB,IAAI,KAAK,EAAE,CAAC;YAC3E,GAAG,CAAC,GAAG,YAAY,IAAI,mBAAmB,CAAC,eAAe,EAAE,CAAC,GAAG,MAAM,CACpE,OAAO,CAAC,OAAO,CAChB,CAAC;YACF,GAAG,CAAC,GAAG,YAAY,IAAI,mBAAmB,CAAC,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1E,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAgB,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CACjC,OAA8B;IAE9B,IAAI,OAAO,OAAO,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;QACrC,OAAO;YACL,CAAC,GAAG,mBAAmB,CAAC,oBAAoB,MAAM,mBAAmB,CAAC,cAAc,EAAE,CAAC,EACrF,OAAO,CAAC,KAAK;SAChB,CAAC;IACJ,CAAC;SAAM,IACL,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACxB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,EACnC,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAChD,MAAM,YAAY,GAAG,GAAG,mBAAmB,CAAC,oBAAoB,IAAI,KAAK,EAAE,CAAC;YAC5E,GAAG,CAAC,GAAG,YAAY,IAAI,mBAAmB,CAAC,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC;YACrE,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAgB,CAAC,CAAC;IACvB,CAAC;IACD,oEAAoE;IACpE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,gCAAgC,CACvC,QAAiC;IAEjC,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;QACpD,MAAM,YAAY,GAAG,GAAG,mBAAmB,CAAC,oBAAoB,IAAI,KAAK,EAAE,CAAC;QAC5E,GAAG,CAAC,GAAG,YAAY,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,CAAC;YAC5D,SAAS,CAAC,SAAS,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAgB,CAAC,CAAC;AACvB,CAAC"}
|