@arizeai/phoenix-client 2.3.2 → 2.3.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/dist/esm/experiments/instrumention.d.ts.map +1 -1
- package/dist/esm/experiments/instrumention.js +11 -7
- package/dist/esm/experiments/instrumention.js.map +1 -1
- package/dist/esm/experiments/runExperiment.d.ts +14 -2
- package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
- package/dist/esm/experiments/runExperiment.js +11 -3
- package/dist/esm/experiments/runExperiment.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/src/datasets/appendDatasetExamples.js +34 -45
- package/dist/src/datasets/appendDatasetExamples.js.map +1 -1
- package/dist/src/datasets/createDataset.js +25 -36
- package/dist/src/datasets/createDataset.js.map +1 -1
- package/dist/src/datasets/getDataset.js +7 -18
- package/dist/src/datasets/getDataset.js.map +1 -1
- package/dist/src/datasets/getDatasetExamples.js +25 -36
- package/dist/src/datasets/getDatasetExamples.js.map +1 -1
- package/dist/src/datasets/getDatasetInfo.js +22 -33
- package/dist/src/datasets/getDatasetInfo.js.map +1 -1
- package/dist/src/datasets/getDatasetInfoByName.js +21 -32
- package/dist/src/datasets/getDatasetInfoByName.js.map +1 -1
- package/dist/src/datasets/listDatasets.js +6 -17
- package/dist/src/datasets/listDatasets.js.map +1 -1
- package/dist/src/experiments/getExperiment.js +13 -24
- package/dist/src/experiments/getExperiment.js.map +1 -1
- package/dist/src/experiments/getExperimentInfo.js +15 -26
- package/dist/src/experiments/getExperimentInfo.js.map +1 -1
- package/dist/src/experiments/getExperimentRuns.js +24 -35
- package/dist/src/experiments/getExperimentRuns.js.map +1 -1
- package/dist/src/experiments/instrumention.d.ts.map +1 -1
- package/dist/src/experiments/instrumention.js +11 -7
- package/dist/src/experiments/instrumention.js.map +1 -1
- package/dist/src/experiments/runExperiment.d.ts +14 -2
- package/dist/src/experiments/runExperiment.d.ts.map +1 -1
- package/dist/src/experiments/runExperiment.js +286 -293
- package/dist/src/experiments/runExperiment.js.map +1 -1
- package/dist/src/prompts/createPrompt.js +14 -25
- package/dist/src/prompts/createPrompt.js.map +1 -1
- package/dist/src/prompts/getPrompt.js +4 -15
- package/dist/src/prompts/getPrompt.js.map +1 -1
- package/dist/src/spans/addSpanAnnotation.js +14 -25
- package/dist/src/spans/addSpanAnnotation.js.map +1 -1
- package/dist/src/spans/getSpanAnnotations.js +29 -40
- package/dist/src/spans/getSpanAnnotations.js.map +1 -1
- package/dist/src/spans/getSpans.js +29 -40
- package/dist/src/spans/getSpans.js.map +1 -1
- package/dist/src/spans/logSpanAnnotations.js +14 -25
- package/dist/src/spans/logSpanAnnotations.js.map +1 -1
- package/dist/src/utils/getPromptBySelector.js +37 -48
- package/dist/src/utils/getPromptBySelector.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/src/experiments/instrumention.ts +7 -5
- package/src/experiments/runExperiment.ts +23 -1
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -18,33 +9,31 @@ const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
|
|
|
18
9
|
/**
|
|
19
10
|
* A function that gets the runs (e.g. the results) of a experiment
|
|
20
11
|
*/
|
|
21
|
-
function getExperimentRuns(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
experiment_id: experimentId,
|
|
28
|
-
},
|
|
12
|
+
async function getExperimentRuns({ client: _client, experimentId, }) {
|
|
13
|
+
const client = _client || (0, client_1.createClient)();
|
|
14
|
+
const getRunsPromise = client.GET("/v1/experiments/{experiment_id}/runs", {
|
|
15
|
+
params: {
|
|
16
|
+
path: {
|
|
17
|
+
experiment_id: experimentId,
|
|
29
18
|
},
|
|
30
|
-
}
|
|
31
|
-
const [experimentRunResponse] = yield Promise.all([getRunsPromise]);
|
|
32
|
-
const { data: { data: experimentRunsData } = {} } = experimentRunResponse;
|
|
33
|
-
(0, tiny_invariant_1.default)(experimentRunsData, "Failed to retrieve experiment runs");
|
|
34
|
-
return {
|
|
35
|
-
runs: experimentRunsData.map((run) => {
|
|
36
|
-
return {
|
|
37
|
-
id: run.id,
|
|
38
|
-
traceId: run.trace_id || null,
|
|
39
|
-
experimentId: run.experiment_id,
|
|
40
|
-
datasetExampleId: run.dataset_example_id,
|
|
41
|
-
startTime: new Date(run.start_time),
|
|
42
|
-
endTime: new Date(run.end_time),
|
|
43
|
-
output: run.output,
|
|
44
|
-
error: run.error || null,
|
|
45
|
-
};
|
|
46
|
-
}),
|
|
47
|
-
};
|
|
19
|
+
},
|
|
48
20
|
});
|
|
21
|
+
const [experimentRunResponse] = await Promise.all([getRunsPromise]);
|
|
22
|
+
const { data: { data: experimentRunsData } = {} } = experimentRunResponse;
|
|
23
|
+
(0, tiny_invariant_1.default)(experimentRunsData, "Failed to retrieve experiment runs");
|
|
24
|
+
return {
|
|
25
|
+
runs: experimentRunsData.map((run) => {
|
|
26
|
+
return {
|
|
27
|
+
id: run.id,
|
|
28
|
+
traceId: run.trace_id || null,
|
|
29
|
+
experimentId: run.experiment_id,
|
|
30
|
+
datasetExampleId: run.dataset_example_id,
|
|
31
|
+
startTime: new Date(run.start_time),
|
|
32
|
+
endTime: new Date(run.end_time),
|
|
33
|
+
output: run.output,
|
|
34
|
+
error: run.error || null,
|
|
35
|
+
};
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
49
38
|
}
|
|
50
39
|
//# sourceMappingURL=getExperimentRuns.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getExperimentRuns.js","sourceRoot":"","sources":["../../../src/experiments/getExperimentRuns.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getExperimentRuns.js","sourceRoot":"","sources":["../../../src/experiments/getExperimentRuns.ts"],"names":[],"mappings":";;;;;AAeA,8CA6BC;AA5CD,sCAAyC;AACzC,oEAAuC;AAWvC;;GAEG;AACI,KAAK,UAAU,iBAAiB,CAAC,EACtC,MAAM,EAAE,OAAO,EACf,YAAY,GACY;IACxB,MAAM,MAAM,GAAG,OAAO,IAAI,IAAA,qBAAY,GAAE,CAAC;IACzC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,sCAAsC,EAAE;QACxE,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,aAAa,EAAE,YAAY;aAC5B;SACF;KACF,CAAC,CAAC;IACH,MAAM,CAAC,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACpE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,EAAE,GAAG,qBAAqB,CAAC;IAC1E,IAAA,wBAAS,EAAC,kBAAkB,EAAE,oCAAoC,CAAC,CAAC;IACpE,OAAO;QACL,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,OAAO;gBACL,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;gBAC7B,YAAY,EAAE,GAAG,CAAC,aAAa;gBAC/B,gBAAgB,EAAE,GAAG,CAAC,kBAAkB;gBACxC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;gBACnC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC/B,MAAM,EAAE,GAAG,CAAC,MAAiC;gBAC7C,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI;aACzB,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumention.d.ts","sourceRoot":"","sources":["../../../src/experiments/instrumention.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrumention.d.ts","sourceRoot":"","sources":["../../../src/experiments/instrumention.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,OAAO,EACP,OAAO,GACR,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,sBAsBA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,uBAIjC"}
|
|
@@ -5,9 +5,9 @@ exports.createNoOpProvider = createNoOpProvider;
|
|
|
5
5
|
const api_1 = require("@opentelemetry/api");
|
|
6
6
|
const exporter_trace_otlp_proto_1 = require("@opentelemetry/exporter-trace-otlp-proto");
|
|
7
7
|
const resources_1 = require("@opentelemetry/resources");
|
|
8
|
-
const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
|
|
9
8
|
const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
|
|
10
9
|
const openinference_semantic_conventions_1 = require("@arizeai/openinference-semantic-conventions");
|
|
10
|
+
const openinference_vercel_1 = require("@arizeai/openinference-vercel");
|
|
11
11
|
/**
|
|
12
12
|
* Creates a provider that exports traces to Phoenix.
|
|
13
13
|
*/
|
|
@@ -18,12 +18,16 @@ function createProvider({ projectName, baseUrl, headers, }) {
|
|
|
18
18
|
[openinference_semantic_conventions_1.SEMRESATTRS_PROJECT_NAME]: projectName,
|
|
19
19
|
}),
|
|
20
20
|
spanProcessors: [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
:
|
|
26
|
-
|
|
21
|
+
// We opt to use the OpenInferenceSimpleSpanProcessor instead of the SimpleSpanProcessor
|
|
22
|
+
// Since so many AI applications use the AI SDK
|
|
23
|
+
new openinference_vercel_1.OpenInferenceSimpleSpanProcessor({
|
|
24
|
+
exporter: new exporter_trace_otlp_proto_1.OTLPTraceExporter({
|
|
25
|
+
url: `${baseUrl}/v1/traces`,
|
|
26
|
+
headers: Array.isArray(headers)
|
|
27
|
+
? Object.fromEntries(headers)
|
|
28
|
+
: headers,
|
|
29
|
+
}),
|
|
30
|
+
}),
|
|
27
31
|
],
|
|
28
32
|
});
|
|
29
33
|
return provider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumention.js","sourceRoot":"","sources":["../../../src/experiments/instrumention.ts"],"names":[],"mappings":";;AAWA,
|
|
1
|
+
{"version":3,"file":"instrumention.js","sourceRoot":"","sources":["../../../src/experiments/instrumention.ts"],"names":[],"mappings":";;AAWA,wCAiCC;AAKD,gDAIC;AArDD,4CAA2E;AAC3E,wFAA6E;AAC7E,wDAAkE;AAClE,kEAAmE;AACnE,oGAAuF;AAEvF,wEAAiF;AAEjF;;GAEG;AACH,SAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,OAAO,EACP,OAAO,GAQR;IACC,UAAI,CAAC,SAAS,CAAC,IAAI,uBAAiB,EAAE,EAAE,kBAAY,CAAC,KAAK,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAG,IAAI,mCAAkB,CAAC;QACtC,QAAQ,EAAE,IAAA,kCAAsB,EAAC;YAC/B,CAAC,6DAAwB,CAAC,EAAE,WAAW;SACxC,CAAC;QACF,cAAc,EAAE;YACd,wFAAwF;YACxF,+CAA+C;YAC/C,IAAI,uDAAgC,CAAC;gBACnC,QAAQ,EAAE,IAAI,6CAAiB,CAAC;oBAC9B,GAAG,EAAE,GAAG,OAAO,YAAY;oBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;wBAC7B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;wBAC7B,CAAC,CAAC,OAAO;iBACZ,CAAC;aACH,CAAC;SACH;KACF,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,mCAAkB,CAAC,EAAE,CAAC,CAAC;IAE5C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -53,6 +53,13 @@ export type RunExperimentParams = ClientFn & {
|
|
|
53
53
|
* @default false
|
|
54
54
|
*/
|
|
55
55
|
dryRun?: number | boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether to set the global tracer provider when running the task.
|
|
58
|
+
* If set to false, a locally scoped tracer will be created but will not get registered.
|
|
59
|
+
* This may cause certain spans to not be picked up by Phoenix. Notably libraries like the AI SDK that leverage the global tracer.
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
62
|
+
setGlobalTracerProvider?: boolean;
|
|
56
63
|
};
|
|
57
64
|
/**
|
|
58
65
|
* Runs an experiment using a given set of dataset of examples.
|
|
@@ -86,13 +93,13 @@ export type RunExperimentParams = ClientFn & {
|
|
|
86
93
|
* });
|
|
87
94
|
* ```
|
|
88
95
|
*/
|
|
89
|
-
export declare function runExperiment({ experimentName, experimentDescription, experimentMetadata, client: _client, dataset: DatasetSelector, task, evaluators, logger, record, concurrency, dryRun, }: RunExperimentParams): Promise<RanExperiment>;
|
|
96
|
+
export declare function runExperiment({ experimentName, experimentDescription, experimentMetadata, client: _client, dataset: DatasetSelector, task, evaluators, logger, record, concurrency, dryRun, setGlobalTracerProvider, }: RunExperimentParams): Promise<RanExperiment>;
|
|
90
97
|
/**
|
|
91
98
|
* Evaluate an experiment.
|
|
92
99
|
*
|
|
93
100
|
* @experimental This feature is not complete, and will change in the future.
|
|
94
101
|
*/
|
|
95
|
-
export declare function evaluateExperiment({ experiment, evaluators, client: _client, logger, concurrency, dryRun, }: {
|
|
102
|
+
export declare function evaluateExperiment({ experiment, evaluators, client: _client, logger, concurrency, dryRun, setGlobalTracerProvider, }: {
|
|
96
103
|
/**
|
|
97
104
|
* The experiment to evaluate
|
|
98
105
|
**/
|
|
@@ -111,6 +118,11 @@ export declare function evaluateExperiment({ experiment, evaluators, client: _cl
|
|
|
111
118
|
* @default false
|
|
112
119
|
* */
|
|
113
120
|
dryRun?: boolean | number;
|
|
121
|
+
/**
|
|
122
|
+
* Whether to set the global tracer provider when running the evaluators
|
|
123
|
+
* @default true
|
|
124
|
+
*/
|
|
125
|
+
setGlobalTracerProvider?: boolean;
|
|
114
126
|
}): Promise<RanExperiment>;
|
|
115
127
|
/**
|
|
116
128
|
* Wrap an evaluator function in an object with a name property.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runExperiment.d.ts","sourceRoot":"","sources":["../../../src/experiments/runExperiment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAEL,eAAe,EAGhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,SAAS,EAKT,cAAc,EACd,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiBrD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG;IAC3C;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC;IACzB;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"runExperiment.d.ts","sourceRoot":"","sources":["../../../src/experiments/runExperiment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAEL,eAAe,EAGhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,SAAS,EAKT,cAAc,EACd,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiBrD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG;IAC3C;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC;IACzB;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,aAAa,CAAC,EAClC,cAAc,EACd,qBAAqB,EACrB,kBAAuB,EACvB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,eAAe,EACxB,IAAI,EACJ,UAAU,EACV,MAAgB,EAChB,MAAa,EACb,WAAe,EACf,MAAc,EACd,uBAA8B,GAC/B,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsJ9C;AAqHD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,UAAU,EACV,UAAU,EACV,MAAM,EAAE,OAAO,EACf,MAAgB,EAChB,WAAe,EACf,MAAc,EACd,uBAA8B,GAC/B,EAAE;IACD;;QAEI;IACJ,UAAU,EAAE,aAAa,CAAC;IAC1B,4BAA4B;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,wBAAwB;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;SAIK;IACL,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,GAAG,OAAO,CAAC,aAAa,CAAC,CA4KzB;AA8DD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;CACjC,GAAG,SAAS,CAMZ"}
|