@aws-cdk/aws-bedrock-agentcore-alpha 2.252.0-alpha.0 → 2.253.0-alpha.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/.jsii +11191 -7249
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +30 -0
- package/README.md +422 -0
- package/lib/evaluation/custom-evaluator.d.ts +153 -0
- package/lib/evaluation/custom-evaluator.js +256 -0
- package/lib/evaluation/data-source.d.ts +106 -0
- package/lib/evaluation/data-source.js +156 -0
- package/lib/evaluation/evaluator-base.d.ts +82 -0
- package/lib/evaluation/evaluator-base.js +55 -0
- package/lib/evaluation/evaluator-config.d.ts +195 -0
- package/lib/evaluation/evaluator-config.js +184 -0
- package/lib/evaluation/evaluator.d.ts +68 -0
- package/lib/evaluation/evaluator.js +90 -0
- package/lib/evaluation/online-evaluation-base.d.ts +96 -0
- package/lib/evaluation/online-evaluation-base.js +55 -0
- package/lib/evaluation/online-evaluation.d.ts +134 -0
- package/lib/evaluation/online-evaluation.js +388 -0
- package/lib/evaluation/perms.d.ts +34 -0
- package/lib/evaluation/perms.js +53 -0
- package/lib/evaluation/types.d.ts +461 -0
- package/lib/evaluation/types.js +229 -0
- package/lib/evaluation/validation-helpers.d.ts +133 -0
- package/lib/evaluation/validation-helpers.js +349 -0
- package/lib/gateway/gateway-base.js +1 -1
- package/lib/gateway/gateway.js +2 -2
- package/lib/gateway/inbound-auth/authorizer.js +4 -4
- package/lib/gateway/inbound-auth/custom-claim.js +1 -1
- package/lib/gateway/interceptor.js +1 -1
- package/lib/gateway/outbound-auth/api-key.js +1 -1
- package/lib/gateway/outbound-auth/credential-provider.js +1 -1
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.js +4 -4
- package/lib/gateway/targets/schema/tool-schema.js +4 -4
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.js +6 -6
- package/lib/gateway/targets/target.js +1 -1
- package/lib/index.d.ts +9 -0
- package/lib/index.js +13 -1
- package/lib/memory/memory-strategy.js +1 -1
- package/lib/memory/memory.js +2 -2
- package/lib/memory/strategies/managed-strategy.js +1 -1
- package/lib/memory/strategies/self-managed-strategy.js +8 -5
- package/lib/network/network-configuration.js +4 -4
- package/lib/policy/policy-base.js +1 -1
- package/lib/policy/policy-engine-base.js +1 -1
- package/lib/policy/policy-engine.js +1 -1
- package/lib/policy/policy-statement.js +5 -5
- package/lib/policy/policy-types.js +1 -1
- package/lib/policy/policy.js +1 -1
- package/lib/runtime/inbound-auth/custom-claim.js +1 -1
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
- package/lib/runtime/observability.js +2 -2
- package/lib/runtime/runtime-artifact.js +1 -1
- package/lib/runtime/runtime-base.js +1 -1
- package/lib/runtime/runtime-endpoint-base.js +1 -1
- package/lib/runtime/runtime-endpoint.js +1 -1
- package/lib/runtime/runtime.js +1 -1
- package/lib/tools/browser.js +2 -2
- package/lib/tools/code-interpreter.js +2 -2
- package/package.json +10 -9
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EvaluatorBase = void 0;
|
|
4
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
+
/**
|
|
6
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
9
|
+
* with the License. A copy of the License is located at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
14
|
+
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
15
|
+
* and limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
18
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
19
|
+
/**
|
|
20
|
+
* Abstract base class for Evaluator.
|
|
21
|
+
* Contains methods and attributes valid for evaluators either created with CDK or imported.
|
|
22
|
+
*/
|
|
23
|
+
class EvaluatorBase extends aws_cdk_lib_1.Resource {
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorBase", version: "2.253.0-alpha.0" };
|
|
25
|
+
constructor(scope, id, props = {}) {
|
|
26
|
+
super(scope, id, props);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A reference to this Evaluator resource.
|
|
30
|
+
*/
|
|
31
|
+
get evaluatorRef() {
|
|
32
|
+
return {
|
|
33
|
+
evaluatorArn: this.evaluatorArn,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Grants IAM actions to the IAM Principal.
|
|
38
|
+
*
|
|
39
|
+
* [disable-awslint:no-grants]
|
|
40
|
+
*
|
|
41
|
+
* @param grantee - The IAM principal to grant permissions to
|
|
42
|
+
* @param actions - The actions to grant
|
|
43
|
+
* @returns An IAM Grant object representing the granted permissions
|
|
44
|
+
*/
|
|
45
|
+
grant(grantee, ...actions) {
|
|
46
|
+
return iam.Grant.addToPrincipal({
|
|
47
|
+
grantee,
|
|
48
|
+
actions,
|
|
49
|
+
resourceArns: [this.evaluatorArn],
|
|
50
|
+
scope: this,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.EvaluatorBase = EvaluatorBase;
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJldmFsdWF0b3ItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw2Q0FBMkU7QUFFM0UsMkNBQTJDO0FBaUQzQzs7O0dBR0c7QUFDSCxNQUFzQixhQUFjLFNBQVEsc0JBQVE7O0lBUWxELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBdUIsRUFBRTtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN6QjtJQUVEOztPQUVHO0lBQ0gsSUFBVyxZQUFZO1FBQ3JCLE9BQU87WUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQztLQUNIO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLE9BQU87WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2pDLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7O0FBckNILHNDQXNDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFJlc291cmNlLCB0eXBlIElSZXNvdXJjZSwgdHlwZSBSZXNvdXJjZVByb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBJRXZhbHVhdG9yUmVmLCBFdmFsdWF0b3JSZWZlcmVuY2UgYXMgTDFFdmFsdWF0b3JSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgRXZhbHVhdG9yIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRXZhbHVhdG9yIGV4dGVuZHMgSVJlc291cmNlLCBJRXZhbHVhdG9yUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGV2YWx1YXRvci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZXZhbHVhdG9yQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgc3RhdHVzIG9mIHRoZSBldmFsdWF0b3IgKENSRUFUSU5HLCBBQ1RJVkUsIEZBSUxFRCwgREVMRVRJTkcpLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgZXZhbHVhdG9yIHdhcyBjcmVhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgZXZhbHVhdG9yIHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIHByaW5jaXBhbCBpZGVudGl0eSBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGFjdGlvbnMgb24gdGhpcyBldmFsdWF0b3IuXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgRXZhbHVhdG9yLlxuICogQ29udGFpbnMgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyB2YWxpZCBmb3IgZXZhbHVhdG9ycyBlaXRoZXIgY3JlYXRlZCB3aXRoIENESyBvciBpbXBvcnRlZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEV2YWx1YXRvckJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElFdmFsdWF0b3Ige1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZXZhbHVhdG9yQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBldmFsdWF0b3JJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZXZhbHVhdG9yTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZXNvdXJjZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGlzIEV2YWx1YXRvciByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZXZhbHVhdG9yUmVmKCk6IEwxRXZhbHVhdG9yUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZhbHVhdG9yQXJuOiB0aGlzLmV2YWx1YXRvckFybixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBJQU0gYWN0aW9ucyB0byB0aGUgSUFNIFByaW5jaXBhbC5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICogQHBhcmFtIGFjdGlvbnMgLSBUaGUgYWN0aW9ucyB0byBncmFudFxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuZXZhbHVhdG9yQXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
5
|
+
* with the License. A copy of the License is located at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
10
|
+
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
11
|
+
* and limitations under the License.
|
|
12
|
+
*/
|
|
13
|
+
import type { Duration } from 'aws-cdk-lib';
|
|
14
|
+
import type * as bedrockagentcore from 'aws-cdk-lib/aws-bedrockagentcore';
|
|
15
|
+
import type * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
16
|
+
import type { CategoricalRatingOption, EvaluatorInferenceConfig, NumericalRatingOption } from './types';
|
|
17
|
+
/**
|
|
18
|
+
* Options for configuring an LLM-as-a-Judge custom evaluator.
|
|
19
|
+
*
|
|
20
|
+
* Uses a foundation model to assess agent performance based on
|
|
21
|
+
* custom instructions and a rating scale.
|
|
22
|
+
*/
|
|
23
|
+
export interface LlmAsAJudgeOptions {
|
|
24
|
+
/**
|
|
25
|
+
* The evaluation instructions that guide the language model in assessing agent performance.
|
|
26
|
+
*
|
|
27
|
+
* These instructions define the evaluation criteria, context, and expected behavior.
|
|
28
|
+
* Instructions must contain placeholders appropriate for the evaluation level
|
|
29
|
+
* (e.g., `{context}`, `{available_tools}` for SESSION level).
|
|
30
|
+
*
|
|
31
|
+
* Note: Evaluators using reference-input placeholders (e.g., `{expected_tool_trajectory}`,
|
|
32
|
+
* `{assertions}`, `{expected_response}`) are only compatible with on-demand evaluation,
|
|
33
|
+
* not online evaluation.
|
|
34
|
+
*
|
|
35
|
+
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/custom-evaluators.html
|
|
36
|
+
*/
|
|
37
|
+
readonly instructions: string;
|
|
38
|
+
/**
|
|
39
|
+
* The identifier of the Amazon Bedrock model to use for evaluation.
|
|
40
|
+
*
|
|
41
|
+
* Accepts standard model IDs (e.g., `'anthropic.claude-sonnet-4-6'`)
|
|
42
|
+
* and cross-region inference profile IDs with region prefixes
|
|
43
|
+
* (e.g., `'us.anthropic.claude-sonnet-4-6'`, `'eu.anthropic.claude-sonnet-4-6'`).
|
|
44
|
+
*/
|
|
45
|
+
readonly modelId: string;
|
|
46
|
+
/**
|
|
47
|
+
* The rating scale that defines how the evaluator should score agent performance.
|
|
48
|
+
*/
|
|
49
|
+
readonly ratingScale: EvaluatorRatingScale;
|
|
50
|
+
/**
|
|
51
|
+
* Optional inference configuration parameters that control model behavior during evaluation.
|
|
52
|
+
*
|
|
53
|
+
* When not specified, the foundation model uses its own default values for
|
|
54
|
+
* maxTokens, temperature, and topP.
|
|
55
|
+
*
|
|
56
|
+
* @default - The foundation model's default inference parameters are used
|
|
57
|
+
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/custom-evaluators.html
|
|
58
|
+
*/
|
|
59
|
+
readonly inferenceConfig?: EvaluatorInferenceConfig;
|
|
60
|
+
/**
|
|
61
|
+
* Additional model-specific request fields.
|
|
62
|
+
*
|
|
63
|
+
* @default - No additional fields
|
|
64
|
+
*/
|
|
65
|
+
readonly additionalModelRequestFields?: {
|
|
66
|
+
[key: string]: any;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Options for configuring a code-based custom evaluator using a Lambda function.
|
|
71
|
+
*
|
|
72
|
+
* Uses a Lambda function to implement custom evaluation logic.
|
|
73
|
+
*/
|
|
74
|
+
export interface CodeBasedOptions {
|
|
75
|
+
/**
|
|
76
|
+
* The Lambda function used for evaluation.
|
|
77
|
+
*
|
|
78
|
+
* The function will be granted invoke permissions for the
|
|
79
|
+
* `bedrock-agentcore.amazonaws.com` service principal, scoped
|
|
80
|
+
* to this specific evaluator resource.
|
|
81
|
+
*/
|
|
82
|
+
readonly lambdaFunction: lambda.IFunction;
|
|
83
|
+
/**
|
|
84
|
+
* The timeout for the Lambda function invocation during evaluation.
|
|
85
|
+
*
|
|
86
|
+
* When not specified, the AgentCore evaluation service uses its default
|
|
87
|
+
* timeout for Lambda-based evaluators.
|
|
88
|
+
*
|
|
89
|
+
* @default - The AgentCore evaluation service's default Lambda timeout is used
|
|
90
|
+
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/custom-evaluators.html
|
|
91
|
+
*/
|
|
92
|
+
readonly timeout?: Duration;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Represents a rating scale for custom LLM-as-a-Judge evaluators.
|
|
96
|
+
*
|
|
97
|
+
* Rating scales define how the evaluator scores agent performance.
|
|
98
|
+
* Use either categorical (discrete labels) or numerical (labeled numeric values) scales.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* // Categorical rating scale
|
|
102
|
+
* const categorical = agentcore.EvaluatorRatingScale.categorical([
|
|
103
|
+
* { label: 'Good', definition: 'The response fully addresses the query.' },
|
|
104
|
+
* { label: 'Bad', definition: 'The response fails to address the query.' },
|
|
105
|
+
* ]);
|
|
106
|
+
*
|
|
107
|
+
* // Numerical rating scale
|
|
108
|
+
* const numerical = agentcore.EvaluatorRatingScale.numerical([
|
|
109
|
+
* { label: 'Poor', definition: 'Inadequate response.', value: 1 },
|
|
110
|
+
* { label: 'Good', definition: 'Adequate response.', value: 3 },
|
|
111
|
+
* { label: 'Excellent', definition: 'Outstanding response.', value: 5 },
|
|
112
|
+
* ]);
|
|
113
|
+
*/
|
|
114
|
+
export declare class EvaluatorRatingScale {
|
|
115
|
+
/**
|
|
116
|
+
* Creates a categorical rating scale.
|
|
117
|
+
*
|
|
118
|
+
* Categorical scales define discrete labels for scoring, such as "Good" / "Bad"
|
|
119
|
+
* or "Pass" / "Fail".
|
|
120
|
+
*
|
|
121
|
+
* @param options - The categorical rating options (at least 1 required)
|
|
122
|
+
*/
|
|
123
|
+
static categorical(options: CategoricalRatingOption[]): EvaluatorRatingScale;
|
|
124
|
+
/**
|
|
125
|
+
* Creates a numerical rating scale.
|
|
126
|
+
*
|
|
127
|
+
* Numerical scales define labeled numeric values for scoring, such as
|
|
128
|
+
* 1 (Poor) through 5 (Excellent).
|
|
129
|
+
*
|
|
130
|
+
* @param options - The numerical rating options (at least 1 required)
|
|
131
|
+
*/
|
|
132
|
+
static numerical(options: NumericalRatingOption[]): EvaluatorRatingScale;
|
|
133
|
+
private readonly config;
|
|
134
|
+
private constructor();
|
|
135
|
+
/**
|
|
136
|
+
* Binds the rating scale to produce the L1 property.
|
|
137
|
+
* @internal
|
|
138
|
+
*/
|
|
139
|
+
_bind(): bedrockagentcore.CfnEvaluator.RatingScaleProperty;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Configuration for a custom evaluator.
|
|
143
|
+
*
|
|
144
|
+
* Defines how an evaluator assesses agent performance. Supports two strategies:
|
|
145
|
+
* - **LLM-as-a-Judge**: Uses a foundation model with custom instructions and a rating scale.
|
|
146
|
+
* - **Code-based**: Uses a Lambda function for custom evaluation logic.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* // LLM-as-a-Judge evaluator
|
|
150
|
+
* const llmConfig = agentcore.EvaluatorConfig.llmAsAJudge({
|
|
151
|
+
* instructions: 'Evaluate whether the agent response is helpful.',
|
|
152
|
+
* modelId: 'us.anthropic.claude-sonnet-4-6',
|
|
153
|
+
* ratingScale: agentcore.EvaluatorRatingScale.categorical([
|
|
154
|
+
* { label: 'Good', definition: 'The response is helpful.' },
|
|
155
|
+
* { label: 'Bad', definition: 'The response is not helpful.' },
|
|
156
|
+
* ]),
|
|
157
|
+
* });
|
|
158
|
+
*
|
|
159
|
+
* // Code-based evaluator
|
|
160
|
+
* declare const myEvalFunction: lambda.IFunction;
|
|
161
|
+
* const codeConfig = agentcore.EvaluatorConfig.codeBased({
|
|
162
|
+
* lambdaFunction: myEvalFunction,
|
|
163
|
+
* });
|
|
164
|
+
*/
|
|
165
|
+
export declare class EvaluatorConfig {
|
|
166
|
+
/**
|
|
167
|
+
* Creates an LLM-as-a-Judge evaluator configuration.
|
|
168
|
+
*
|
|
169
|
+
* Uses a foundation model to assess agent performance based on custom
|
|
170
|
+
* instructions and a rating scale.
|
|
171
|
+
*
|
|
172
|
+
* @param options - The LLM-as-a-Judge configuration options
|
|
173
|
+
*/
|
|
174
|
+
static llmAsAJudge(options: LlmAsAJudgeOptions): EvaluatorConfig;
|
|
175
|
+
/**
|
|
176
|
+
* Creates a code-based evaluator configuration using a Lambda function.
|
|
177
|
+
*
|
|
178
|
+
* The Lambda function implements custom evaluation logic. The function will
|
|
179
|
+
* automatically be granted invoke permissions for the bedrock-agentcore service.
|
|
180
|
+
*
|
|
181
|
+
* @param options - The code-based configuration options
|
|
182
|
+
*/
|
|
183
|
+
static codeBased(options: CodeBasedOptions): EvaluatorConfig;
|
|
184
|
+
/**
|
|
185
|
+
* The Lambda function used for code-based evaluation, if applicable.
|
|
186
|
+
*/
|
|
187
|
+
readonly lambdaFunction?: lambda.IFunction;
|
|
188
|
+
private readonly cfnConfig;
|
|
189
|
+
private constructor();
|
|
190
|
+
/**
|
|
191
|
+
* Binds the evaluator configuration to produce the L1 property.
|
|
192
|
+
* @internal
|
|
193
|
+
*/
|
|
194
|
+
_bind(): bedrockagentcore.CfnEvaluator.EvaluatorConfigProperty;
|
|
195
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EvaluatorConfig = exports.EvaluatorRatingScale = void 0;
|
|
4
|
+
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const validation_helpers_1 = require("./validation-helpers");
|
|
7
|
+
/**
|
|
8
|
+
* Represents a rating scale for custom LLM-as-a-Judge evaluators.
|
|
9
|
+
*
|
|
10
|
+
* Rating scales define how the evaluator scores agent performance.
|
|
11
|
+
* Use either categorical (discrete labels) or numerical (labeled numeric values) scales.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Categorical rating scale
|
|
15
|
+
* const categorical = agentcore.EvaluatorRatingScale.categorical([
|
|
16
|
+
* { label: 'Good', definition: 'The response fully addresses the query.' },
|
|
17
|
+
* { label: 'Bad', definition: 'The response fails to address the query.' },
|
|
18
|
+
* ]);
|
|
19
|
+
*
|
|
20
|
+
* // Numerical rating scale
|
|
21
|
+
* const numerical = agentcore.EvaluatorRatingScale.numerical([
|
|
22
|
+
* { label: 'Poor', definition: 'Inadequate response.', value: 1 },
|
|
23
|
+
* { label: 'Good', definition: 'Adequate response.', value: 3 },
|
|
24
|
+
* { label: 'Excellent', definition: 'Outstanding response.', value: 5 },
|
|
25
|
+
* ]);
|
|
26
|
+
*/
|
|
27
|
+
class EvaluatorRatingScale {
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorRatingScale", version: "2.253.0-alpha.0" };
|
|
29
|
+
/**
|
|
30
|
+
* Creates a categorical rating scale.
|
|
31
|
+
*
|
|
32
|
+
* Categorical scales define discrete labels for scoring, such as "Good" / "Bad"
|
|
33
|
+
* or "Pass" / "Fail".
|
|
34
|
+
*
|
|
35
|
+
* @param options - The categorical rating options (at least 1 required)
|
|
36
|
+
*/
|
|
37
|
+
static categorical(options) {
|
|
38
|
+
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateCategoricalRatingScale, options);
|
|
39
|
+
return new EvaluatorRatingScale({ categorical: options });
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates a numerical rating scale.
|
|
43
|
+
*
|
|
44
|
+
* Numerical scales define labeled numeric values for scoring, such as
|
|
45
|
+
* 1 (Poor) through 5 (Excellent).
|
|
46
|
+
*
|
|
47
|
+
* @param options - The numerical rating options (at least 1 required)
|
|
48
|
+
*/
|
|
49
|
+
static numerical(options) {
|
|
50
|
+
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateNumericalRatingScale, options);
|
|
51
|
+
return new EvaluatorRatingScale({ numerical: options });
|
|
52
|
+
}
|
|
53
|
+
config;
|
|
54
|
+
constructor(config) {
|
|
55
|
+
this.config = config;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Binds the rating scale to produce the L1 property.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
_bind() {
|
|
62
|
+
return this.config;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.EvaluatorRatingScale = EvaluatorRatingScale;
|
|
66
|
+
/**
|
|
67
|
+
* Configuration for a custom evaluator.
|
|
68
|
+
*
|
|
69
|
+
* Defines how an evaluator assesses agent performance. Supports two strategies:
|
|
70
|
+
* - **LLM-as-a-Judge**: Uses a foundation model with custom instructions and a rating scale.
|
|
71
|
+
* - **Code-based**: Uses a Lambda function for custom evaluation logic.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* // LLM-as-a-Judge evaluator
|
|
75
|
+
* const llmConfig = agentcore.EvaluatorConfig.llmAsAJudge({
|
|
76
|
+
* instructions: 'Evaluate whether the agent response is helpful.',
|
|
77
|
+
* modelId: 'us.anthropic.claude-sonnet-4-6',
|
|
78
|
+
* ratingScale: agentcore.EvaluatorRatingScale.categorical([
|
|
79
|
+
* { label: 'Good', definition: 'The response is helpful.' },
|
|
80
|
+
* { label: 'Bad', definition: 'The response is not helpful.' },
|
|
81
|
+
* ]),
|
|
82
|
+
* });
|
|
83
|
+
*
|
|
84
|
+
* // Code-based evaluator
|
|
85
|
+
* declare const myEvalFunction: lambda.IFunction;
|
|
86
|
+
* const codeConfig = agentcore.EvaluatorConfig.codeBased({
|
|
87
|
+
* lambdaFunction: myEvalFunction,
|
|
88
|
+
* });
|
|
89
|
+
*/
|
|
90
|
+
class EvaluatorConfig {
|
|
91
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorConfig", version: "2.253.0-alpha.0" };
|
|
92
|
+
/**
|
|
93
|
+
* Creates an LLM-as-a-Judge evaluator configuration.
|
|
94
|
+
*
|
|
95
|
+
* Uses a foundation model to assess agent performance based on custom
|
|
96
|
+
* instructions and a rating scale.
|
|
97
|
+
*
|
|
98
|
+
* @param options - The LLM-as-a-Judge configuration options
|
|
99
|
+
*/
|
|
100
|
+
static llmAsAJudge(options) {
|
|
101
|
+
try {
|
|
102
|
+
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_LlmAsAJudgeOptions(options);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
106
|
+
Error.captureStackTrace(error, this.llmAsAJudge);
|
|
107
|
+
}
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateInstructions, options.instructions);
|
|
111
|
+
const modelConfig = {
|
|
112
|
+
bedrockEvaluatorModelConfig: {
|
|
113
|
+
modelId: options.modelId,
|
|
114
|
+
...(options.inferenceConfig !== undefined ? {
|
|
115
|
+
inferenceConfig: {
|
|
116
|
+
maxTokens: options.inferenceConfig.maxTokens,
|
|
117
|
+
temperature: options.inferenceConfig.temperature,
|
|
118
|
+
topP: options.inferenceConfig.topP,
|
|
119
|
+
},
|
|
120
|
+
} : {}),
|
|
121
|
+
...(options.additionalModelRequestFields !== undefined ? {
|
|
122
|
+
additionalModelRequestFields: options.additionalModelRequestFields,
|
|
123
|
+
} : {}),
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
const cfnConfig = {
|
|
127
|
+
llmAsAJudge: {
|
|
128
|
+
instructions: options.instructions,
|
|
129
|
+
modelConfig,
|
|
130
|
+
ratingScale: options.ratingScale._bind(),
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
return new EvaluatorConfig(cfnConfig);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Creates a code-based evaluator configuration using a Lambda function.
|
|
137
|
+
*
|
|
138
|
+
* The Lambda function implements custom evaluation logic. The function will
|
|
139
|
+
* automatically be granted invoke permissions for the bedrock-agentcore service.
|
|
140
|
+
*
|
|
141
|
+
* @param options - The code-based configuration options
|
|
142
|
+
*/
|
|
143
|
+
static codeBased(options) {
|
|
144
|
+
try {
|
|
145
|
+
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_CodeBasedOptions(options);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
149
|
+
Error.captureStackTrace(error, this.codeBased);
|
|
150
|
+
}
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
153
|
+
const timeoutInSeconds = options.timeout?.toSeconds();
|
|
154
|
+
const cfnConfig = {
|
|
155
|
+
codeBased: {
|
|
156
|
+
lambdaConfig: {
|
|
157
|
+
lambdaArn: options.lambdaFunction.functionArn,
|
|
158
|
+
...(timeoutInSeconds !== undefined ? {
|
|
159
|
+
lambdaTimeoutInSeconds: timeoutInSeconds,
|
|
160
|
+
} : {}),
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
return new EvaluatorConfig(cfnConfig, options.lambdaFunction);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* The Lambda function used for code-based evaluation, if applicable.
|
|
168
|
+
*/
|
|
169
|
+
lambdaFunction;
|
|
170
|
+
cfnConfig;
|
|
171
|
+
constructor(cfnConfig, lambdaFunction) {
|
|
172
|
+
this.cfnConfig = cfnConfig;
|
|
173
|
+
this.lambdaFunction = lambdaFunction;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Binds the evaluator configuration to produce the L1 property.
|
|
177
|
+
* @internal
|
|
178
|
+
*/
|
|
179
|
+
_bind() {
|
|
180
|
+
return this.cfnConfig;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.EvaluatorConfig = EvaluatorConfig;
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV2YWx1YXRvci1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFpQkEsNkRBSzhCO0FBb0Y5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsb0JBQW9COztJQUMvQjs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFrQztRQUMxRCxJQUFBLG1DQUFjLEVBQUMsbURBQThCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLG9CQUFvQixDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDM0Q7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFnQztRQUN0RCxJQUFBLG1DQUFjLEVBQUMsaURBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEQsT0FBTyxJQUFJLG9CQUFvQixDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDekQ7SUFFZ0IsTUFBTSxDQUFvRDtJQUUzRSxZQUFvQixNQUF5RDtRQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUN0QjtJQUVEOzs7T0FHRztJQUNJLEtBQUs7UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDcEI7O0FBdkNILG9EQXdDQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsZUFBZTs7SUFDMUI7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBMkI7Ozs7Ozs7Ozs7UUFDbkQsSUFBQSxtQ0FBYyxFQUFDLHlDQUFvQixFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUzRCxNQUFNLFdBQVcsR0FBK0Q7WUFDOUUsMkJBQTJCLEVBQUU7Z0JBQzNCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDeEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsZUFBZSxFQUFFO3dCQUNmLFNBQVMsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLFNBQVM7d0JBQzVDLFdBQVcsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQVc7d0JBQ2hELElBQUksRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUk7cUJBQ25DO2lCQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxHQUFHLENBQUMsT0FBTyxDQUFDLDRCQUE0QixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELDRCQUE0QixFQUFFLE9BQU8sQ0FBQyw0QkFBNEI7aUJBQ25FLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNSO1NBQ0YsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUEwRDtZQUN2RSxXQUFXLEVBQUU7Z0JBQ1gsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxXQUFXO2dCQUNYLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTthQUN6QztTQUNGLENBQUM7UUFFRixPQUFPLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBeUI7Ozs7Ozs7Ozs7UUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBRXRELE1BQU0sU0FBUyxHQUEwRDtZQUN2RSxTQUFTLEVBQUU7Z0JBQ1QsWUFBWSxFQUFFO29CQUNaLFNBQVMsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVc7b0JBQzdDLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO3dCQUNuQyxzQkFBc0IsRUFBRSxnQkFBZ0I7cUJBQ3pDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDUjthQUNGO1NBQ0YsQ0FBQztRQUVGLE9BQU8sSUFBSSxlQUFlLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUMvRDtJQUVEOztPQUVHO0lBQ2EsY0FBYyxDQUFvQjtJQUVqQyxTQUFTLENBQXdEO0lBRWxGLFlBQ0UsU0FBZ0UsRUFDaEUsY0FBaUM7UUFFakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7S0FDdEM7SUFFRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0tBQ3ZCOztBQXJGSCwwQ0FzRkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCB0eXBlICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yaWNhbFJhdGluZ09wdGlvbiwgRXZhbHVhdG9ySW5mZXJlbmNlQ29uZmlnLCBOdW1lcmljYWxSYXRpbmdPcHRpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIHRocm93SWZJbnZhbGlkLFxuICB2YWxpZGF0ZUNhdGVnb3JpY2FsUmF0aW5nU2NhbGUsXG4gIHZhbGlkYXRlSW5zdHJ1Y3Rpb25zLFxuICB2YWxpZGF0ZU51bWVyaWNhbFJhdGluZ1NjYWxlLFxufSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gTExNLWFzLWEtSnVkZ2UgY3VzdG9tIGV2YWx1YXRvci5cbiAqXG4gKiBVc2VzIGEgZm91bmRhdGlvbiBtb2RlbCB0byBhc3Nlc3MgYWdlbnQgcGVyZm9ybWFuY2UgYmFzZWQgb25cbiAqIGN1c3RvbSBpbnN0cnVjdGlvbnMgYW5kIGEgcmF0aW5nIHNjYWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExsbUFzQUp1ZGdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZXZhbHVhdGlvbiBpbnN0cnVjdGlvbnMgdGhhdCBndWlkZSB0aGUgbGFuZ3VhZ2UgbW9kZWwgaW4gYXNzZXNzaW5nIGFnZW50IHBlcmZvcm1hbmNlLlxuICAgKlxuICAgKiBUaGVzZSBpbnN0cnVjdGlvbnMgZGVmaW5lIHRoZSBldmFsdWF0aW9uIGNyaXRlcmlhLCBjb250ZXh0LCBhbmQgZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAqIEluc3RydWN0aW9ucyBtdXN0IGNvbnRhaW4gcGxhY2Vob2xkZXJzIGFwcHJvcHJpYXRlIGZvciB0aGUgZXZhbHVhdGlvbiBsZXZlbFxuICAgKiAoZS5nLiwgYHtjb250ZXh0fWAsIGB7YXZhaWxhYmxlX3Rvb2xzfWAgZm9yIFNFU1NJT04gbGV2ZWwpLlxuICAgKlxuICAgKiBOb3RlOiBFdmFsdWF0b3JzIHVzaW5nIHJlZmVyZW5jZS1pbnB1dCBwbGFjZWhvbGRlcnMgKGUuZy4sIGB7ZXhwZWN0ZWRfdG9vbF90cmFqZWN0b3J5fWAsXG4gICAqIGB7YXNzZXJ0aW9uc31gLCBge2V4cGVjdGVkX3Jlc3BvbnNlfWApIGFyZSBvbmx5IGNvbXBhdGlibGUgd2l0aCBvbi1kZW1hbmQgZXZhbHVhdGlvbixcbiAgICogbm90IG9ubGluZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvY3VzdG9tLWV2YWx1YXRvcnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdHJ1Y3Rpb25zOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBBbWF6b24gQmVkcm9jayBtb2RlbCB0byB1c2UgZm9yIGV2YWx1YXRpb24uXG4gICAqXG4gICAqIEFjY2VwdHMgc3RhbmRhcmQgbW9kZWwgSURzIChlLmcuLCBgJ2FudGhyb3BpYy5jbGF1ZGUtc29ubmV0LTQtNidgKVxuICAgKiBhbmQgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBwcm9maWxlIElEcyB3aXRoIHJlZ2lvbiBwcmVmaXhlc1xuICAgKiAoZS5nLiwgYCd1cy5hbnRocm9waWMuY2xhdWRlLXNvbm5ldC00LTYnYCwgYCdldS5hbnRocm9waWMuY2xhdWRlLXNvbm5ldC00LTYnYCkuXG4gICAqL1xuICByZWFkb25seSBtb2RlbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByYXRpbmcgc2NhbGUgdGhhdCBkZWZpbmVzIGhvdyB0aGUgZXZhbHVhdG9yIHNob3VsZCBzY29yZSBhZ2VudCBwZXJmb3JtYW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IHJhdGluZ1NjYWxlOiBFdmFsdWF0b3JSYXRpbmdTY2FsZTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgaW5mZXJlbmNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgbW9kZWwgYmVoYXZpb3IgZHVyaW5nIGV2YWx1YXRpb24uXG4gICAqXG4gICAqIFdoZW4gbm90IHNwZWNpZmllZCwgdGhlIGZvdW5kYXRpb24gbW9kZWwgdXNlcyBpdHMgb3duIGRlZmF1bHQgdmFsdWVzIGZvclxuICAgKiBtYXhUb2tlbnMsIHRlbXBlcmF0dXJlLCBhbmQgdG9wUC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgZm91bmRhdGlvbiBtb2RlbCdzIGRlZmF1bHQgaW5mZXJlbmNlIHBhcmFtZXRlcnMgYXJlIHVzZWRcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2N1c3RvbS1ldmFsdWF0b3JzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGluZmVyZW5jZUNvbmZpZz86IEV2YWx1YXRvckluZmVyZW5jZUNvbmZpZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtb2RlbC1zcGVjaWZpYyByZXF1ZXN0IGZpZWxkcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIGZpZWxkc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbE1vZGVsUmVxdWVzdEZpZWxkcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBjb2RlLWJhc2VkIGN1c3RvbSBldmFsdWF0b3IgdXNpbmcgYSBMYW1iZGEgZnVuY3Rpb24uXG4gKlxuICogVXNlcyBhIExhbWJkYSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgY3VzdG9tIGV2YWx1YXRpb24gbG9naWMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJhc2VkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHVzZWQgZm9yIGV2YWx1YXRpb24uXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGdyYW50ZWQgaW52b2tlIHBlcm1pc3Npb25zIGZvciB0aGVcbiAgICogYGJlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb21gIHNlcnZpY2UgcHJpbmNpcGFsLCBzY29wZWRcbiAgICogdG8gdGhpcyBzcGVjaWZpYyBldmFsdWF0b3IgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFGdW5jdGlvbjogbGFtYmRhLklGdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24gaW52b2NhdGlvbiBkdXJpbmcgZXZhbHVhdGlvbi5cbiAgICpcbiAgICogV2hlbiBub3Qgc3BlY2lmaWVkLCB0aGUgQWdlbnRDb3JlIGV2YWx1YXRpb24gc2VydmljZSB1c2VzIGl0cyBkZWZhdWx0XG4gICAqIHRpbWVvdXQgZm9yIExhbWJkYS1iYXNlZCBldmFsdWF0b3JzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBBZ2VudENvcmUgZXZhbHVhdGlvbiBzZXJ2aWNlJ3MgZGVmYXVsdCBMYW1iZGEgdGltZW91dCBpcyB1c2VkXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9jdXN0b20tZXZhbHVhdG9ycy5odG1sXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJhdGluZyBzY2FsZSBmb3IgY3VzdG9tIExMTS1hcy1hLUp1ZGdlIGV2YWx1YXRvcnMuXG4gKlxuICogUmF0aW5nIHNjYWxlcyBkZWZpbmUgaG93IHRoZSBldmFsdWF0b3Igc2NvcmVzIGFnZW50IHBlcmZvcm1hbmNlLlxuICogVXNlIGVpdGhlciBjYXRlZ29yaWNhbCAoZGlzY3JldGUgbGFiZWxzKSBvciBudW1lcmljYWwgKGxhYmVsZWQgbnVtZXJpYyB2YWx1ZXMpIHNjYWxlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2F0ZWdvcmljYWwgcmF0aW5nIHNjYWxlXG4gKiBjb25zdCBjYXRlZ29yaWNhbCA9IGFnZW50Y29yZS5FdmFsdWF0b3JSYXRpbmdTY2FsZS5jYXRlZ29yaWNhbChbXG4gKiAgIHsgbGFiZWw6ICdHb29kJywgZGVmaW5pdGlvbjogJ1RoZSByZXNwb25zZSBmdWxseSBhZGRyZXNzZXMgdGhlIHF1ZXJ5LicgfSxcbiAqICAgeyBsYWJlbDogJ0JhZCcsIGRlZmluaXRpb246ICdUaGUgcmVzcG9uc2UgZmFpbHMgdG8gYWRkcmVzcyB0aGUgcXVlcnkuJyB9LFxuICogXSk7XG4gKlxuICogLy8gTnVtZXJpY2FsIHJhdGluZyBzY2FsZVxuICogY29uc3QgbnVtZXJpY2FsID0gYWdlbnRjb3JlLkV2YWx1YXRvclJhdGluZ1NjYWxlLm51bWVyaWNhbChbXG4gKiAgIHsgbGFiZWw6ICdQb29yJywgZGVmaW5pdGlvbjogJ0luYWRlcXVhdGUgcmVzcG9uc2UuJywgdmFsdWU6IDEgfSxcbiAqICAgeyBsYWJlbDogJ0dvb2QnLCBkZWZpbml0aW9uOiAnQWRlcXVhdGUgcmVzcG9uc2UuJywgdmFsdWU6IDMgfSxcbiAqICAgeyBsYWJlbDogJ0V4Y2VsbGVudCcsIGRlZmluaXRpb246ICdPdXRzdGFuZGluZyByZXNwb25zZS4nLCB2YWx1ZTogNSB9LFxuICogXSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBFdmFsdWF0b3JSYXRpbmdTY2FsZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2F0ZWdvcmljYWwgcmF0aW5nIHNjYWxlLlxuICAgKlxuICAgKiBDYXRlZ29yaWNhbCBzY2FsZXMgZGVmaW5lIGRpc2NyZXRlIGxhYmVscyBmb3Igc2NvcmluZywgc3VjaCBhcyBcIkdvb2RcIiAvIFwiQmFkXCJcbiAgICogb3IgXCJQYXNzXCIgLyBcIkZhaWxcIi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgY2F0ZWdvcmljYWwgcmF0aW5nIG9wdGlvbnMgKGF0IGxlYXN0IDEgcmVxdWlyZWQpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNhdGVnb3JpY2FsKG9wdGlvbnM6IENhdGVnb3JpY2FsUmF0aW5nT3B0aW9uW10pOiBFdmFsdWF0b3JSYXRpbmdTY2FsZSB7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVDYXRlZ29yaWNhbFJhdGluZ1NjYWxlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IEV2YWx1YXRvclJhdGluZ1NjYWxlKHsgY2F0ZWdvcmljYWw6IG9wdGlvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG51bWVyaWNhbCByYXRpbmcgc2NhbGUuXG4gICAqXG4gICAqIE51bWVyaWNhbCBzY2FsZXMgZGVmaW5lIGxhYmVsZWQgbnVtZXJpYyB2YWx1ZXMgZm9yIHNjb3JpbmcsIHN1Y2ggYXNcbiAgICogMSAoUG9vcikgdGhyb3VnaCA1IChFeGNlbGxlbnQpLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBudW1lcmljYWwgcmF0aW5nIG9wdGlvbnMgKGF0IGxlYXN0IDEgcmVxdWlyZWQpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG51bWVyaWNhbChvcHRpb25zOiBOdW1lcmljYWxSYXRpbmdPcHRpb25bXSk6IEV2YWx1YXRvclJhdGluZ1NjYWxlIHtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZU51bWVyaWNhbFJhdGluZ1NjYWxlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IEV2YWx1YXRvclJhdGluZ1NjYWxlKHsgbnVtZXJpY2FsOiBvcHRpb25zIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuRXZhbHVhdG9yLlJhdGluZ1NjYWxlUHJvcGVydHk7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihjb25maWc6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuRXZhbHVhdG9yLlJhdGluZ1NjYWxlUHJvcGVydHkpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUgcmF0aW5nIHNjYWxlIHRvIHByb2R1Y2UgdGhlIEwxIHByb3BlcnR5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfYmluZCgpOiBiZWRyb2NrYWdlbnRjb3JlLkNmbkV2YWx1YXRvci5SYXRpbmdTY2FsZVByb3BlcnR5IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIGN1c3RvbSBldmFsdWF0b3IuXG4gKlxuICogRGVmaW5lcyBob3cgYW4gZXZhbHVhdG9yIGFzc2Vzc2VzIGFnZW50IHBlcmZvcm1hbmNlLiBTdXBwb3J0cyB0d28gc3RyYXRlZ2llczpcbiAqIC0gKipMTE0tYXMtYS1KdWRnZSoqOiBVc2VzIGEgZm91bmRhdGlvbiBtb2RlbCB3aXRoIGN1c3RvbSBpbnN0cnVjdGlvbnMgYW5kIGEgcmF0aW5nIHNjYWxlLlxuICogLSAqKkNvZGUtYmFzZWQqKjogVXNlcyBhIExhbWJkYSBmdW5jdGlvbiBmb3IgY3VzdG9tIGV2YWx1YXRpb24gbG9naWMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIExMTS1hcy1hLUp1ZGdlIGV2YWx1YXRvclxuICogY29uc3QgbGxtQ29uZmlnID0gYWdlbnRjb3JlLkV2YWx1YXRvckNvbmZpZy5sbG1Bc0FKdWRnZSh7XG4gKiAgIGluc3RydWN0aW9uczogJ0V2YWx1YXRlIHdoZXRoZXIgdGhlIGFnZW50IHJlc3BvbnNlIGlzIGhlbHBmdWwuJyxcbiAqICAgbW9kZWxJZDogJ3VzLmFudGhyb3BpYy5jbGF1ZGUtc29ubmV0LTQtNicsXG4gKiAgIHJhdGluZ1NjYWxlOiBhZ2VudGNvcmUuRXZhbHVhdG9yUmF0aW5nU2NhbGUuY2F0ZWdvcmljYWwoW1xuICogICAgIHsgbGFiZWw6ICdHb29kJywgZGVmaW5pdGlvbjogJ1RoZSByZXNwb25zZSBpcyBoZWxwZnVsLicgfSxcbiAqICAgICB7IGxhYmVsOiAnQmFkJywgZGVmaW5pdGlvbjogJ1RoZSByZXNwb25zZSBpcyBub3QgaGVscGZ1bC4nIH0sXG4gKiAgIF0pLFxuICogfSk7XG4gKlxuICogLy8gQ29kZS1iYXNlZCBldmFsdWF0b3JcbiAqIGRlY2xhcmUgY29uc3QgbXlFdmFsRnVuY3Rpb246IGxhbWJkYS5JRnVuY3Rpb247XG4gKiBjb25zdCBjb2RlQ29uZmlnID0gYWdlbnRjb3JlLkV2YWx1YXRvckNvbmZpZy5jb2RlQmFzZWQoe1xuICogICBsYW1iZGFGdW5jdGlvbjogbXlFdmFsRnVuY3Rpb24sXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIEV2YWx1YXRvckNvbmZpZyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIExMTS1hcy1hLUp1ZGdlIGV2YWx1YXRvciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2VzIGEgZm91bmRhdGlvbiBtb2RlbCB0byBhc3Nlc3MgYWdlbnQgcGVyZm9ybWFuY2UgYmFzZWQgb24gY3VzdG9tXG4gICAqIGluc3RydWN0aW9ucyBhbmQgYSByYXRpbmcgc2NhbGUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIExMTS1hcy1hLUp1ZGdlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBsbG1Bc0FKdWRnZShvcHRpb25zOiBMbG1Bc0FKdWRnZU9wdGlvbnMpOiBFdmFsdWF0b3JDb25maWcge1xuICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlSW5zdHJ1Y3Rpb25zLCBvcHRpb25zLmluc3RydWN0aW9ucyk7XG5cbiAgICBjb25zdCBtb2RlbENvbmZpZzogYmVkcm9ja2FnZW50Y29yZS5DZm5FdmFsdWF0b3IuRXZhbHVhdG9yTW9kZWxDb25maWdQcm9wZXJ0eSA9IHtcbiAgICAgIGJlZHJvY2tFdmFsdWF0b3JNb2RlbENvbmZpZzoge1xuICAgICAgICBtb2RlbElkOiBvcHRpb25zLm1vZGVsSWQsXG4gICAgICAgIC4uLihvcHRpb25zLmluZmVyZW5jZUNvbmZpZyAhPT0gdW5kZWZpbmVkID8ge1xuICAgICAgICAgIGluZmVyZW5jZUNvbmZpZzoge1xuICAgICAgICAgICAgbWF4VG9rZW5zOiBvcHRpb25zLmluZmVyZW5jZUNvbmZpZy5tYXhUb2tlbnMsXG4gICAgICAgICAgICB0ZW1wZXJhdHVyZTogb3B0aW9ucy5pbmZlcmVuY2VDb25maWcudGVtcGVyYXR1cmUsXG4gICAgICAgICAgICB0b3BQOiBvcHRpb25zLmluZmVyZW5jZUNvbmZpZy50b3BQLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiB7fSksXG4gICAgICAgIC4uLihvcHRpb25zLmFkZGl0aW9uYWxNb2RlbFJlcXVlc3RGaWVsZHMgIT09IHVuZGVmaW5lZCA/IHtcbiAgICAgICAgICBhZGRpdGlvbmFsTW9kZWxSZXF1ZXN0RmllbGRzOiBvcHRpb25zLmFkZGl0aW9uYWxNb2RlbFJlcXVlc3RGaWVsZHMsXG4gICAgICAgIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjZm5Db25maWc6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuRXZhbHVhdG9yLkV2YWx1YXRvckNvbmZpZ1Byb3BlcnR5ID0ge1xuICAgICAgbGxtQXNBSnVkZ2U6IHtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zOiBvcHRpb25zLmluc3RydWN0aW9ucyxcbiAgICAgICAgbW9kZWxDb25maWcsXG4gICAgICAgIHJhdGluZ1NjYWxlOiBvcHRpb25zLnJhdGluZ1NjYWxlLl9iaW5kKCksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IEV2YWx1YXRvckNvbmZpZyhjZm5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb2RlLWJhc2VkIGV2YWx1YXRvciBjb25maWd1cmF0aW9uIHVzaW5nIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGltcGxlbWVudHMgY3VzdG9tIGV2YWx1YXRpb24gbG9naWMuIFRoZSBmdW5jdGlvbiB3aWxsXG4gICAqIGF1dG9tYXRpY2FsbHkgYmUgZ3JhbnRlZCBpbnZva2UgcGVybWlzc2lvbnMgZm9yIHRoZSBiZWRyb2NrLWFnZW50Y29yZSBzZXJ2aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjb2RlLWJhc2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb2RlQmFzZWQob3B0aW9uczogQ29kZUJhc2VkT3B0aW9ucyk6IEV2YWx1YXRvckNvbmZpZyB7XG4gICAgY29uc3QgdGltZW91dEluU2Vjb25kcyA9IG9wdGlvbnMudGltZW91dD8udG9TZWNvbmRzKCk7XG5cbiAgICBjb25zdCBjZm5Db25maWc6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuRXZhbHVhdG9yLkV2YWx1YXRvckNvbmZpZ1Byb3BlcnR5ID0ge1xuICAgICAgY29kZUJhc2VkOiB7XG4gICAgICAgIGxhbWJkYUNvbmZpZzoge1xuICAgICAgICAgIGxhbWJkYUFybjogb3B0aW9ucy5sYW1iZGFGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgICAgICAuLi4odGltZW91dEluU2Vjb25kcyAhPT0gdW5kZWZpbmVkID8ge1xuICAgICAgICAgICAgbGFtYmRhVGltZW91dEluU2Vjb25kczogdGltZW91dEluU2Vjb25kcyxcbiAgICAgICAgICB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBFdmFsdWF0b3JDb25maWcoY2ZuQ29uZmlnLCBvcHRpb25zLmxhbWJkYUZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHVzZWQgZm9yIGNvZGUtYmFzZWQgZXZhbHVhdGlvbiwgaWYgYXBwbGljYWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGFGdW5jdGlvbj86IGxhbWJkYS5JRnVuY3Rpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjZm5Db25maWc6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuRXZhbHVhdG9yLkV2YWx1YXRvckNvbmZpZ1Byb3BlcnR5O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgY2ZuQ29uZmlnOiBiZWRyb2NrYWdlbnRjb3JlLkNmbkV2YWx1YXRvci5FdmFsdWF0b3JDb25maWdQcm9wZXJ0eSxcbiAgICBsYW1iZGFGdW5jdGlvbj86IGxhbWJkYS5JRnVuY3Rpb24sXG4gICkge1xuICAgIHRoaXMuY2ZuQ29uZmlnID0gY2ZuQ29uZmlnO1xuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSBsYW1iZGFGdW5jdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUgZXZhbHVhdG9yIGNvbmZpZ3VyYXRpb24gdG8gcHJvZHVjZSB0aGUgTDEgcHJvcGVydHkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9iaW5kKCk6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuRXZhbHVhdG9yLkV2YWx1YXRvckNvbmZpZ1Byb3BlcnR5IHtcbiAgICByZXR1cm4gdGhpcy5jZm5Db25maWc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
5
|
+
* with the License. A copy of the License is located at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
10
|
+
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
11
|
+
* and limitations under the License.
|
|
12
|
+
*/
|
|
13
|
+
import type { IEvaluator } from './evaluator-base';
|
|
14
|
+
import type { BuiltinEvaluator, EvaluatorReferenceBindResult } from './types';
|
|
15
|
+
/**
|
|
16
|
+
* Represents a reference to an evaluator for online evaluation.
|
|
17
|
+
*
|
|
18
|
+
* Use the static factory methods to create evaluator references:
|
|
19
|
+
* - `EvaluatorReference.builtin()` for built-in evaluators
|
|
20
|
+
* - `EvaluatorReference.custom()` for custom evaluators
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Using built-in evaluators
|
|
24
|
+
* const helpfulness = agentcore.EvaluatorReference.builtin(agentcore.BuiltinEvaluator.HELPFULNESS);
|
|
25
|
+
*
|
|
26
|
+
* // Using custom evaluators
|
|
27
|
+
* declare const myCustomEvaluator: agentcore.IEvaluator;
|
|
28
|
+
* const custom = agentcore.EvaluatorReference.custom(myCustomEvaluator);
|
|
29
|
+
*/
|
|
30
|
+
export declare class EvaluatorReference {
|
|
31
|
+
/**
|
|
32
|
+
* Creates a reference to a built-in evaluator.
|
|
33
|
+
*
|
|
34
|
+
* Built-in evaluators are provided by Amazon Bedrock AgentCore and assess
|
|
35
|
+
* different aspects of agent performance at various levels (session, trace, or tool call).
|
|
36
|
+
*
|
|
37
|
+
* @param evaluator - The built-in evaluator to reference
|
|
38
|
+
* @returns An EvaluatorReference instance
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* const helpfulness = agentcore.EvaluatorReference.builtin(agentcore.BuiltinEvaluator.HELPFULNESS);
|
|
42
|
+
* const goalSuccess = agentcore.EvaluatorReference.builtin(agentcore.BuiltinEvaluator.GOAL_SUCCESS_RATE);
|
|
43
|
+
*/
|
|
44
|
+
static builtin(evaluator: BuiltinEvaluator): EvaluatorReference;
|
|
45
|
+
/**
|
|
46
|
+
* Creates a reference to a custom evaluator.
|
|
47
|
+
*
|
|
48
|
+
* Custom evaluators are created using the `Evaluator` construct and can be
|
|
49
|
+
* LLM-as-a-Judge or code-based (Lambda) evaluators.
|
|
50
|
+
*
|
|
51
|
+
* @param evaluator - The custom evaluator construct to reference
|
|
52
|
+
* @returns An EvaluatorReference instance
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* declare const myCustomEvaluator: agentcore.IEvaluator;
|
|
56
|
+
* const ref = agentcore.EvaluatorReference.custom(myCustomEvaluator);
|
|
57
|
+
*/
|
|
58
|
+
static custom(evaluator: IEvaluator): EvaluatorReference;
|
|
59
|
+
/**
|
|
60
|
+
* The evaluator identifier.
|
|
61
|
+
*/
|
|
62
|
+
readonly evaluatorId: string;
|
|
63
|
+
private constructor();
|
|
64
|
+
/**
|
|
65
|
+
* Binds the evaluator reference to produce the L1 property.
|
|
66
|
+
*/
|
|
67
|
+
bind(): EvaluatorReferenceBindResult;
|
|
68
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EvaluatorReference = void 0;
|
|
4
|
+
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
/**
|
|
7
|
+
* Represents a reference to an evaluator for online evaluation.
|
|
8
|
+
*
|
|
9
|
+
* Use the static factory methods to create evaluator references:
|
|
10
|
+
* - `EvaluatorReference.builtin()` for built-in evaluators
|
|
11
|
+
* - `EvaluatorReference.custom()` for custom evaluators
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Using built-in evaluators
|
|
15
|
+
* const helpfulness = agentcore.EvaluatorReference.builtin(agentcore.BuiltinEvaluator.HELPFULNESS);
|
|
16
|
+
*
|
|
17
|
+
* // Using custom evaluators
|
|
18
|
+
* declare const myCustomEvaluator: agentcore.IEvaluator;
|
|
19
|
+
* const custom = agentcore.EvaluatorReference.custom(myCustomEvaluator);
|
|
20
|
+
*/
|
|
21
|
+
class EvaluatorReference {
|
|
22
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorReference", version: "2.253.0-alpha.0" };
|
|
23
|
+
/**
|
|
24
|
+
* Creates a reference to a built-in evaluator.
|
|
25
|
+
*
|
|
26
|
+
* Built-in evaluators are provided by Amazon Bedrock AgentCore and assess
|
|
27
|
+
* different aspects of agent performance at various levels (session, trace, or tool call).
|
|
28
|
+
*
|
|
29
|
+
* @param evaluator - The built-in evaluator to reference
|
|
30
|
+
* @returns An EvaluatorReference instance
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* const helpfulness = agentcore.EvaluatorReference.builtin(agentcore.BuiltinEvaluator.HELPFULNESS);
|
|
34
|
+
* const goalSuccess = agentcore.EvaluatorReference.builtin(agentcore.BuiltinEvaluator.GOAL_SUCCESS_RATE);
|
|
35
|
+
*/
|
|
36
|
+
static builtin(evaluator) {
|
|
37
|
+
try {
|
|
38
|
+
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_BuiltinEvaluator(evaluator);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
42
|
+
Error.captureStackTrace(error, this.builtin);
|
|
43
|
+
}
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
return new EvaluatorReference(evaluator.value);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Creates a reference to a custom evaluator.
|
|
50
|
+
*
|
|
51
|
+
* Custom evaluators are created using the `Evaluator` construct and can be
|
|
52
|
+
* LLM-as-a-Judge or code-based (Lambda) evaluators.
|
|
53
|
+
*
|
|
54
|
+
* @param evaluator - The custom evaluator construct to reference
|
|
55
|
+
* @returns An EvaluatorReference instance
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* declare const myCustomEvaluator: agentcore.IEvaluator;
|
|
59
|
+
* const ref = agentcore.EvaluatorReference.custom(myCustomEvaluator);
|
|
60
|
+
*/
|
|
61
|
+
static custom(evaluator) {
|
|
62
|
+
try {
|
|
63
|
+
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_IEvaluator(evaluator);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
67
|
+
Error.captureStackTrace(error, this.custom);
|
|
68
|
+
}
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
return new EvaluatorReference(evaluator.evaluatorId);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The evaluator identifier.
|
|
75
|
+
*/
|
|
76
|
+
evaluatorId;
|
|
77
|
+
constructor(evaluatorId) {
|
|
78
|
+
this.evaluatorId = evaluatorId;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Binds the evaluator reference to produce the L1 property.
|
|
82
|
+
*/
|
|
83
|
+
bind() {
|
|
84
|
+
return {
|
|
85
|
+
evaluatorId: this.evaluatorId,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.EvaluatorReference = EvaluatorReference;
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXZhbHVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0JBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBYSxrQkFBa0I7O0lBQzdCOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBMkI7Ozs7Ozs7Ozs7UUFDL0MsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoRDtJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBcUI7Ozs7Ozs7Ozs7UUFDeEMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUN0RDtJQUVEOztPQUVHO0lBQ2EsV0FBVyxDQUFTO0lBRXBDLFlBQW9CLFdBQW1CO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0tBQ2hDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1QsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM5QixDQUFDO0tBQ0g7O0FBbkRILGdEQW9EQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSUV2YWx1YXRvciB9IGZyb20gJy4vZXZhbHVhdG9yLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBCdWlsdGluRXZhbHVhdG9yLCBFdmFsdWF0b3JSZWZlcmVuY2VCaW5kUmVzdWx0IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZmVyZW5jZSB0byBhbiBldmFsdWF0b3IgZm9yIG9ubGluZSBldmFsdWF0aW9uLlxuICpcbiAqIFVzZSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kcyB0byBjcmVhdGUgZXZhbHVhdG9yIHJlZmVyZW5jZXM6XG4gKiAtIGBFdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbigpYCBmb3IgYnVpbHQtaW4gZXZhbHVhdG9yc1xuICogLSBgRXZhbHVhdG9yUmVmZXJlbmNlLmN1c3RvbSgpYCBmb3IgY3VzdG9tIGV2YWx1YXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXNpbmcgYnVpbHQtaW4gZXZhbHVhdG9yc1xuICogY29uc3QgaGVscGZ1bG5lc3MgPSBhZ2VudGNvcmUuRXZhbHVhdG9yUmVmZXJlbmNlLmJ1aWx0aW4oYWdlbnRjb3JlLkJ1aWx0aW5FdmFsdWF0b3IuSEVMUEZVTE5FU1MpO1xuICpcbiAqIC8vIFVzaW5nIGN1c3RvbSBldmFsdWF0b3JzXG4gKiBkZWNsYXJlIGNvbnN0IG15Q3VzdG9tRXZhbHVhdG9yOiBhZ2VudGNvcmUuSUV2YWx1YXRvcjtcbiAqIGNvbnN0IGN1c3RvbSA9IGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuY3VzdG9tKG15Q3VzdG9tRXZhbHVhdG9yKTtcbiAqL1xuZXhwb3J0IGNsYXNzIEV2YWx1YXRvclJlZmVyZW5jZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmVmZXJlbmNlIHRvIGEgYnVpbHQtaW4gZXZhbHVhdG9yLlxuICAgKlxuICAgKiBCdWlsdC1pbiBldmFsdWF0b3JzIGFyZSBwcm92aWRlZCBieSBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUgYW5kIGFzc2Vzc1xuICAgKiBkaWZmZXJlbnQgYXNwZWN0cyBvZiBhZ2VudCBwZXJmb3JtYW5jZSBhdCB2YXJpb3VzIGxldmVscyAoc2Vzc2lvbiwgdHJhY2UsIG9yIHRvb2wgY2FsbCkuXG4gICAqXG4gICAqIEBwYXJhbSBldmFsdWF0b3IgLSBUaGUgYnVpbHQtaW4gZXZhbHVhdG9yIHRvIHJlZmVyZW5jZVxuICAgKiBAcmV0dXJucyBBbiBFdmFsdWF0b3JSZWZlcmVuY2UgaW5zdGFuY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgaGVscGZ1bG5lc3MgPSBhZ2VudGNvcmUuRXZhbHVhdG9yUmVmZXJlbmNlLmJ1aWx0aW4oYWdlbnRjb3JlLkJ1aWx0aW5FdmFsdWF0b3IuSEVMUEZVTE5FU1MpO1xuICAgKiBjb25zdCBnb2FsU3VjY2VzcyA9IGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbihhZ2VudGNvcmUuQnVpbHRpbkV2YWx1YXRvci5HT0FMX1NVQ0NFU1NfUkFURSk7XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJ1aWx0aW4oZXZhbHVhdG9yOiBCdWlsdGluRXZhbHVhdG9yKTogRXZhbHVhdG9yUmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IEV2YWx1YXRvclJlZmVyZW5jZShldmFsdWF0b3IudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZWZlcmVuY2UgdG8gYSBjdXN0b20gZXZhbHVhdG9yLlxuICAgKlxuICAgKiBDdXN0b20gZXZhbHVhdG9ycyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgYEV2YWx1YXRvcmAgY29uc3RydWN0IGFuZCBjYW4gYmVcbiAgICogTExNLWFzLWEtSnVkZ2Ugb3IgY29kZS1iYXNlZCAoTGFtYmRhKSBldmFsdWF0b3JzLlxuICAgKlxuICAgKiBAcGFyYW0gZXZhbHVhdG9yIC0gVGhlIGN1c3RvbSBldmFsdWF0b3IgY29uc3RydWN0IHRvIHJlZmVyZW5jZVxuICAgKiBAcmV0dXJucyBBbiBFdmFsdWF0b3JSZWZlcmVuY2UgaW5zdGFuY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogZGVjbGFyZSBjb25zdCBteUN1c3RvbUV2YWx1YXRvcjogYWdlbnRjb3JlLklFdmFsdWF0b3I7XG4gICAqIGNvbnN0IHJlZiA9IGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuY3VzdG9tKG15Q3VzdG9tRXZhbHVhdG9yKTtcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3VzdG9tKGV2YWx1YXRvcjogSUV2YWx1YXRvcik6IEV2YWx1YXRvclJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBFdmFsdWF0b3JSZWZlcmVuY2UoZXZhbHVhdG9yLmV2YWx1YXRvcklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXZhbHVhdG9yIGlkZW50aWZpZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9ySWQ6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGV2YWx1YXRvcklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV2YWx1YXRvcklkID0gZXZhbHVhdG9ySWQ7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgdGhlIGV2YWx1YXRvciByZWZlcmVuY2UgdG8gcHJvZHVjZSB0aGUgTDEgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgYmluZCgpOiBFdmFsdWF0b3JSZWZlcmVuY2VCaW5kUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZhbHVhdG9ySWQ6IHRoaXMuZXZhbHVhdG9ySWQsXG4gICAgfTtcbiAgfVxufVxuIl19
|