n8n-nodes-ragmetrics 0.1.5 → 0.1.6
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 +81 -75
- package/dist/credentials/RagmetricsApi.credentials.js +2 -2
- package/dist/nodes/Ragmetrics/Ragmetrics.node.js +7 -6
- package/dist/nodes/Ragmetrics/Ragmetrics.node.js.map +1 -1
- package/dist/nodes/Ragmetrics/favicon.svg +470 -0
- package/dist/nodes/Ragmetrics/logo.svg +470 -0
- package/dist/package.json +4 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,75 +1,81 @@
|
|
|
1
|
-
## RAGMETRICS
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
###
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
- . **
|
|
27
|
-
|
|
28
|
-
- . **
|
|
29
|
-
|
|
30
|
-
- . **
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
1
|
+
## RAGMETRICS
|
|
2
|
+
|
|
3
|
+
### *The AI Trust Layer*
|
|
4
|
+
|
|
5
|
+
Real-time monitoring and scoring mechanism integrated directly into your LLM pipeline. Monitor, measure, and improve your generative AI outputs with confidence as they happen in production.
|
|
6
|
+
|
|
7
|
+
RagMetrics is a turnkey evaluationAI service that scores, analyzes, validates and monitors any AI-generated text in seconds. Plug RagMetrics into your workflow to ensure accuracy, consistency, and quality—without needing extra reviewers. The system evaluates responses based on customizable criteria and provides detailed scoring and reasoning.
|
|
8
|
+
|
|
9
|
+
RagMetrics has been proven to detect Hallucination in AI Agents and chat bots.
|
|
10
|
+
|
|
11
|
+
Visit: https://ragmetrics.ai/live-ai-evaluation
|
|
12
|
+
|
|
13
|
+
*Put your workflows and chat bots under the microscope and understand when they start to derail, hallucinate or degrade their accuracy.*
|
|
14
|
+
|
|
15
|
+
### Requirements
|
|
16
|
+
|
|
17
|
+
To configure you n8n node, you need a RagMetrics API key. For that you have to register for the service at ragmetrics.ai. You will also need a LLM Provider API key.
|
|
18
|
+
|
|
19
|
+
You can configure your account and get your RagMetrics API Key at: app.ragmetrics.ai
|
|
20
|
+
|
|
21
|
+
### Understanding the evaluation process
|
|
22
|
+
|
|
23
|
+
The evaluation process is very simple. It compares an *answer* to a specific *question* to a *ground truth answer* in a *context* given. A *score* and *reasoning* is provided based on a *criteria* or criterion given to evaluate.
|
|
24
|
+
|
|
25
|
+
#### Inputs to the evaluation
|
|
26
|
+
- . **question:** The question that you want to evaluate. Example: *Which is capital of France?*
|
|
27
|
+
|
|
28
|
+
- . **answer:** This is the answer that is going to be evaluated. Example: *Paris*.
|
|
29
|
+
|
|
30
|
+
- . **ground_truth_answer**: This is the source of truth. It is used as rubric to for the evaluation process to score the criterion. Example: *The capital of France is Paris.*
|
|
31
|
+
|
|
32
|
+
- . **context:** Additional information that is used to evaluate. The context becomes more relevant in non-direct comparison criterion. As an example in cases of **hallucination:** The context is key to understand if the evaluated answer related to the conversation that has been happening. Example: *Paris is the capital and largest city of France, with an estimated population of 2,048,472 in January 2025 in an area of more than 105 km2 (41 sq mi).*
|
|
33
|
+
|
|
34
|
+
- . **Conversation ID:** The conversation is use to track the monitoring of different bots
|
|
35
|
+
|
|
36
|
+
- . **type:** This is the type of evaluation.
|
|
37
|
+
|
|
38
|
+
- . **Conversation ID:** The conversation is use to track the monitoring of different bots
|
|
39
|
+
|
|
40
|
+
- . **Evaluation Group ID:** The evaluation group id can be obtained in the application @ ragmetrics.ai. It has to be preconfigured in the platform with the criteria needed to run the evaluations properly.
|
|
41
|
+
|
|
42
|
+
#### Example of a Information for an evaluation
|
|
43
|
+
```json
|
|
44
|
+
|
|
45
|
+
From Input to the Node:
|
|
46
|
+
"question": "What is the capital of France?",
|
|
47
|
+
"answer": "Paris.",
|
|
48
|
+
"ground_truth_answer": "Paris is the capital of France.",
|
|
49
|
+
"context": "",
|
|
50
|
+
|
|
51
|
+
From Configuration:
|
|
52
|
+
|
|
53
|
+
"type": "S",
|
|
54
|
+
"conversation_id":"ChatBot1"
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
After the evaluation is completed almost in real time, the system returns the score for each of the metrics and the reasoning behind.
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Using the n8n RagMetrics Module
|
|
61
|
+
|
|
62
|
+
***Configuration:*** The module requires the corresponding configuration:
|
|
63
|
+
- RagMetrics API Key: linked to your account in ragmetrics.ai
|
|
64
|
+
- Type of Evaluation: S - Simple, or C- Conversational
|
|
65
|
+
- Conversation ID: user created indicator to monitor different conversations
|
|
66
|
+
- Evaluation Group ID: obtained from the ragmetrics.ai application, used to monitor different groups of AI agents
|
|
67
|
+
|
|
68
|
+
***Input:*** You should provide the no de the fields needed for the evaluation:
|
|
69
|
+
- question: question to answer
|
|
70
|
+
- answer: answer that has to be evaluated
|
|
71
|
+
- ground_truth_answer: source of truth for the answer to be evaluated
|
|
72
|
+
- context: additional information to help the evaluation process
|
|
73
|
+
|
|
74
|
+
The inputs should be in Json Format.
|
|
75
|
+
|
|
76
|
+
Obtain the results and monitor what is going on with your tools!
|
|
77
|
+
|
|
78
|
+
Look for more information and examples in our website!!
|
|
79
|
+
|
|
80
|
+
support: support@ragmetrics.ai
|
|
81
|
+
website: ragmetrics.ai
|
|
@@ -4,7 +4,7 @@ exports.RagmetricsApi = void 0;
|
|
|
4
4
|
class RagmetricsApi {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.name = 'ragmetricsApi';
|
|
7
|
-
this.displayName = '
|
|
7
|
+
this.displayName = 'RagMetrics API';
|
|
8
8
|
this.documentationUrl = 'https://ragmetrics.ai';
|
|
9
9
|
this.properties = [
|
|
10
10
|
{
|
|
@@ -16,7 +16,7 @@ class RagmetricsApi {
|
|
|
16
16
|
},
|
|
17
17
|
default: '',
|
|
18
18
|
required: true,
|
|
19
|
-
description: 'Your
|
|
19
|
+
description: 'Your RagMetrics API key',
|
|
20
20
|
},
|
|
21
21
|
];
|
|
22
22
|
this.test = {
|
|
@@ -5,14 +5,14 @@ const n8n_workflow_1 = require("n8n-workflow");
|
|
|
5
5
|
class Ragmetrics {
|
|
6
6
|
constructor() {
|
|
7
7
|
this.description = {
|
|
8
|
-
displayName: '
|
|
8
|
+
displayName: 'RagMetrics',
|
|
9
9
|
name: 'ragmetrics',
|
|
10
10
|
icon: 'file:Ragmetrics_blue.svg',
|
|
11
11
|
group: ['transform'],
|
|
12
12
|
version: 1,
|
|
13
|
-
description: '
|
|
13
|
+
description: 'RagMetrics: Evaluate AI agents and outputs',
|
|
14
14
|
defaults: {
|
|
15
|
-
name: '
|
|
15
|
+
name: 'RagMetrics',
|
|
16
16
|
},
|
|
17
17
|
inputs: ['main'],
|
|
18
18
|
outputs: ['main'],
|
|
@@ -68,7 +68,8 @@ class Ragmetrics {
|
|
|
68
68
|
displayName: 'Evaluation Group ID',
|
|
69
69
|
name: 'eval_group_id',
|
|
70
70
|
type: 'string',
|
|
71
|
-
default: '
|
|
71
|
+
default: '',
|
|
72
|
+
required: true,
|
|
72
73
|
description: 'The evaluation group identifier',
|
|
73
74
|
},
|
|
74
75
|
{
|
|
@@ -106,7 +107,7 @@ class Ragmetrics {
|
|
|
106
107
|
eval_group_id: evalGroupId,
|
|
107
108
|
type,
|
|
108
109
|
};
|
|
109
|
-
this.logger.debug('
|
|
110
|
+
this.logger.debug('RagMetrics Request Details', {
|
|
110
111
|
url: 'https://api.ragmetrics.ai/v2/single-evaluation/',
|
|
111
112
|
method: 'POST',
|
|
112
113
|
body: requestBody,
|
|
@@ -169,7 +170,7 @@ class Ragmetrics {
|
|
|
169
170
|
catch (error) {
|
|
170
171
|
const errorMessage = error.message;
|
|
171
172
|
const errorResponse = error.response;
|
|
172
|
-
this.logger.error('
|
|
173
|
+
this.logger.error('RagMetrics Request Failed', {
|
|
173
174
|
error: errorMessage,
|
|
174
175
|
statusCode: errorResponse === null || errorResponse === void 0 ? void 0 : errorResponse.statusCode,
|
|
175
176
|
statusText: errorResponse === null || errorResponse === void 0 ? void 0 : errorResponse.statusText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ragmetrics.node.js","sourceRoot":"","sources":["../../../nodes/Ragmetrics/Ragmetrics.node.ts"],"names":[],"mappings":";;;AAGA,+CAOsB;AAEtB,MAAa,UAAU;IAAvB;QACE,gBAAW,GAAyB;YAClC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;aACnB;YACD,MAAM,EAAE,CAAC,MAA4B,CAAC;YACtC,OAAO,EAAE,CAAC,MAA4B,CAAC;YACvC,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,UAAU,EAAE;gBACV;oBACE,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,6CAA6C;iBAC3D;gBACD;oBACE,WAAW,EAAE,cAAc;oBAC3B,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;gBACD;oBACE,WAAW,EAAE,QAAQ;oBACrB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,qCAAqC;iBACnD;gBACD;oBACE,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;wBACX,IAAI,EAAE,CAAC;qBACR;oBACD,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,4BAA4B;iBAC1C;gBACD;oBACE,WAAW,EAAE,iBAAiB;oBAC9B,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,6BAA6B;iBAC3C;gBACD;oBACE,WAAW,EAAE,qBAAqB;oBAClC,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Ragmetrics.node.js","sourceRoot":"","sources":["../../../nodes/Ragmetrics/Ragmetrics.node.ts"],"names":[],"mappings":";;;AAGA,+CAOsB;AAEtB,MAAa,UAAU;IAAvB;QACE,gBAAW,GAAyB;YAClC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;aACnB;YACD,MAAM,EAAE,CAAC,MAA4B,CAAC;YACtC,OAAO,EAAE,CAAC,MAA4B,CAAC;YACvC,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,UAAU,EAAE;gBACV;oBACE,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,6CAA6C;iBAC3D;gBACD;oBACE,WAAW,EAAE,cAAc;oBAC3B,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;gBACD;oBACE,WAAW,EAAE,QAAQ;oBACrB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,qCAAqC;iBACnD;gBACD;oBACE,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;wBACX,IAAI,EAAE,CAAC;qBACR;oBACD,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,4BAA4B;iBAC1C;gBACD;oBACE,WAAW,EAAE,iBAAiB;oBAC9B,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,6BAA6B;iBAC3C;gBACD;oBACE,WAAW,EAAE,qBAAqB;oBAClC,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,iCAAiC;iBAC/C;gBACJ;oBACK,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,GAAG;oBACZ,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;aACF;SACF,CAAC;IAmJJ,CAAC;IAhJC,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC7C,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACrB,IAAI,KAAK,CAAC,MAAM,GAAC,CAAC;YAAE,CAAC,GAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAW,CAAC;gBAChE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAW,CAAC;gBACvE,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;gBAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAW,CAAC;gBAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAW,CAAC;gBACxE,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAW,CAAC;gBACxD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAW,CAAC;gBAEnE,MAAM,WAAW,GAAG;oBAClB,QAAQ;oBACR,YAAY,EAAE,WAAW;oBACzB,MAAM;oBACN,OAAO,EAAE,YAAY;oBACrB,eAAe,EAAE,cAAc;oBAC/B,aAAa,EAAE,WAAW;oBAC1B,IAAI;iBACL,CAAC;gBAGF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;oBAC9C,GAAG,EAAE,iDAAiD;oBACtD,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,WAAW;iBAClB,CAAC,CAAC;gBAGH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;gBAC/D,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM;oBACtC,CAAC,CAAC,GAAI,WAAW,CAAC,MAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK;oBACzD,CAAC,CAAC,SAAS,CAAC;gBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;gBAEjE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAC1E,IAAI,EACJ,eAAe,EACf;oBACE,MAAM,EAAE,MAAM;oBACd,GAAG,EAAE,iDAAiD;oBACtD,OAAO,EAAE;wBACP,QAAQ,EAAE,kBAAkB;wBAC5B,cAAc,EAAE,kBAAkB;qBACnC;oBACD,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,IAAI;iBACX,CACF,CAAC;gBAEF,MAAM,KAAK,GACT,cAAc,CAAC,MAAM,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,KAAK,IAAI;oBACnE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;oBAC/B,CAAC,CAAC,SAAS,CAAC;gBAChB,MAAM,cAAc,GAClB,cAAc,CAAC,gBAAgB,KAAK,SAAS,IAAI,cAAc,CAAC,gBAAgB,KAAK,IAAI;oBACvF,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC;oBACzC,CAAC,CAAC,SAAS,CAAC;gBAChB,MAAM,QAAQ,GACZ,cAAc,CAAC,SAAS,KAAK,SAAS,IAAI,cAAc,CAAC,SAAS,KAAK,IAAI;oBACzE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;oBAClC,CAAC,CAAC,SAAS,CAAC;gBAGhB,MAAM,YAAY,GAAQ;oBACxB,OAAO,EAAE,cAAc,CAAC,OAAO;oBAC/B,MAAM,EAAE,cAAc,CAAC,MAAM;iBAC9B,CAAC;gBAGF,IAAI,cAAc,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACzC,YAAY,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;gBAChD,CAAC;gBAGD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC9B,CAAC;gBAGD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;oBACjC,YAAY,CAAC,gBAAgB,GAAG,cAAc,CAAC;gBACjD,CAAC;gBAGD,IAAI,cAAc,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAExC,IAAI,cAAc,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;wBAClF,YAAY,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;oBAChD,CAAC;oBAGD,IAAI,cAAc,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;wBACjD,YAAY,CAAC,eAAe,GAAG,cAAc,CAAC,eAAe,CAAC;oBAChE,CAAC;oBAGD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;wBAC3B,YAAY,CAAC,SAAS,GAAG,QAAQ,CAAC;oBACpC,CAAC;gBACH,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE;wBACV,IAAI,EAAE,CAAC;qBACR;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAEf,MAAM,YAAY,GAAI,KAAe,CAAC,OAAO,CAAC;gBAC9C,MAAM,aAAa,GAAI,KAAa,CAAC,QAAQ,CAAC;gBAE9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;oBAC7C,KAAK,EAAE,YAAY;oBACnB,UAAU,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU;oBACrC,UAAU,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU;oBACrC,YAAY,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI;oBACjC,eAAe,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO;iBACxC,CAAC,CAAC;gBAEH,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1B,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE;4BACJ,KAAK,EAAE,YAAY;4BACnB,UAAU,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU;4BACrC,YAAY,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI;yBAClC;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,CAAC;yBACR;qBACF,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAEH,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;CACF;AAjOD,gCAiOC"}
|