@cdklabs/cdk-appmod-catalog-blueprints 1.2.2 → 1.3.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 +802 -171
- package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
- package/lib/document-processing/agentic-document-processing.d.ts +5 -28
- package/lib/document-processing/agentic-document-processing.js +8 -63
- package/lib/document-processing/base-document-processing.js +4 -20
- package/lib/document-processing/bedrock-document-processing.d.ts +4 -32
- package/lib/document-processing/bedrock-document-processing.js +10 -37
- package/lib/document-processing/default-document-processing-config.js +1 -1
- package/lib/document-processing/tests/agentic-document-processing-nag.test.js +12 -11
- package/lib/document-processing/tests/agentic-document-processing.test.js +36 -11
- package/lib/document-processing/tests/bedrock-document-processing-nag.test.js +3 -2
- package/lib/document-processing/tests/bedrock-document-processing.test.js +12 -7
- package/lib/framework/agents/base-agent.d.ts +90 -0
- package/lib/framework/agents/base-agent.js +55 -0
- package/lib/framework/agents/batch-agent.d.ts +11 -0
- package/lib/framework/agents/batch-agent.js +64 -0
- package/lib/framework/agents/default-agent-config.d.ts +3 -0
- package/lib/framework/agents/default-agent-config.js +12 -0
- package/lib/framework/agents/index.d.ts +3 -0
- package/lib/framework/agents/index.js +20 -0
- package/lib/framework/agents/resources/default-strands-agent/batch.py +99 -0
- package/lib/framework/agents/resources/default-strands-agent/models.py +7 -0
- package/lib/framework/agents/resources/default-strands-agent/requirements.txt +7 -0
- package/lib/framework/agents/resources/default-strands-agent/utils.py +36 -0
- package/lib/framework/bedrock/bedrock.d.ts +38 -0
- package/lib/framework/bedrock/bedrock.js +54 -0
- package/lib/framework/bedrock/index.d.ts +1 -0
- package/lib/framework/bedrock/index.js +18 -0
- package/lib/framework/custom-resource/default-runtimes.js +1 -1
- package/lib/framework/foundation/access-log.js +1 -1
- package/lib/framework/foundation/eventbridge-broker.js +1 -1
- package/lib/framework/foundation/network.js +1 -1
- package/lib/framework/index.d.ts +2 -0
- package/lib/framework/index.js +3 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utilities/data-loader.js +1 -1
- package/lib/utilities/lambda-iam-utils.js +4 -3
- package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
- package/lib/utilities/observability/default-observability-config.js +1 -1
- package/lib/utilities/observability/index.d.ts +1 -0
- package/lib/utilities/observability/index.js +2 -1
- package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
- package/lib/utilities/observability/log-group-data-protection-utils.d.ts +6 -0
- package/lib/utilities/observability/log-group-data-protection-utils.js +37 -0
- package/lib/utilities/observability/powertools-config.js +1 -1
- package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
- package/lib/webapp/frontend-construct.js +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
4
4
|
const assertions_1 = require("aws-cdk-lib/assertions");
|
|
5
5
|
const aws_bedrock_1 = require("aws-cdk-lib/aws-bedrock");
|
|
6
|
+
const framework_1 = require("../../framework");
|
|
6
7
|
const bedrock_document_processing_1 = require("../bedrock-document-processing");
|
|
7
8
|
describe('BedrockDocumentProcessing', () => {
|
|
8
9
|
let defaultStack;
|
|
@@ -17,13 +18,17 @@ describe('BedrockDocumentProcessing', () => {
|
|
|
17
18
|
new bedrock_document_processing_1.BedrockDocumentProcessing(defaultStack, 'DefaultTest', {});
|
|
18
19
|
customStack = new aws_cdk_lib_1.Stack();
|
|
19
20
|
new bedrock_document_processing_1.BedrockDocumentProcessing(customStack, 'CustomTest', {
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
classificationBedrockModel: {
|
|
22
|
+
fmModelId: aws_bedrock_1.FoundationModelIdentifier.ANTHROPIC_CLAUDE_3_HAIKU_20240307_V1_0,
|
|
23
|
+
useCrossRegionInference: false,
|
|
24
|
+
},
|
|
22
25
|
});
|
|
23
26
|
crossRegionStack = new aws_cdk_lib_1.Stack();
|
|
24
27
|
new bedrock_document_processing_1.BedrockDocumentProcessing(crossRegionStack, 'CrossRegionTest', {
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
classificationBedrockModel: {
|
|
29
|
+
useCrossRegionInference: true,
|
|
30
|
+
crossRegionInferencePrefix: framework_1.BedrockCrossRegionInferencePrefix.EU,
|
|
31
|
+
},
|
|
27
32
|
});
|
|
28
33
|
// Generate templates once after all constructs are created
|
|
29
34
|
defaultTemplate = assertions_1.Template.fromStack(defaultStack);
|
|
@@ -41,7 +46,7 @@ describe('BedrockDocumentProcessing', () => {
|
|
|
41
46
|
defaultTemplate.hasResourceProperties('AWS::Lambda::Function', {
|
|
42
47
|
Environment: {
|
|
43
48
|
Variables: {
|
|
44
|
-
MODEL_ID: 'anthropic.claude-
|
|
49
|
+
MODEL_ID: 'anthropic.claude-sonnet-4-20250514-v1:0',
|
|
45
50
|
},
|
|
46
51
|
},
|
|
47
52
|
});
|
|
@@ -59,7 +64,7 @@ describe('BedrockDocumentProcessing', () => {
|
|
|
59
64
|
crossRegionTemplate.hasResourceProperties('AWS::Lambda::Function', {
|
|
60
65
|
Environment: {
|
|
61
66
|
Variables: {
|
|
62
|
-
MODEL_ID: 'eu.anthropic.claude-
|
|
67
|
+
MODEL_ID: 'eu.anthropic.claude-sonnet-4-20250514-v1:0',
|
|
63
68
|
},
|
|
64
69
|
},
|
|
65
70
|
});
|
|
@@ -76,4 +81,4 @@ describe('BedrockDocumentProcessing', () => {
|
|
|
76
81
|
});
|
|
77
82
|
});
|
|
78
83
|
});
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1kb2N1bWVudC1wcm9jZXNzaW5nLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZG9jdW1lbnQtcHJvY2Vzc2luZy90ZXN0cy9iZWRyb2NrLWRvY3VtZW50LXByb2Nlc3NpbmcudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUFvQztBQUNwQyx1REFBa0Q7QUFDbEQseURBQW9FO0FBQ3BFLCtDQUFvRTtBQUNwRSxnRkFBMkU7QUFFM0UsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtJQUN6QyxJQUFJLFlBQW1CLENBQUM7SUFDeEIsSUFBSSxXQUFrQixDQUFDO0lBQ3ZCLElBQUksZ0JBQXVCLENBQUM7SUFDNUIsSUFBSSxlQUF5QixDQUFDO0lBQzlCLElBQUksY0FBd0IsQ0FBQztJQUM3QixJQUFJLG1CQUE2QixDQUFDO0lBRWxDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYix5Q0FBeUM7UUFDekMsWUFBWSxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksdURBQXlCLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvRCxXQUFXLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSx1REFBeUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFO1lBQ3ZELDBCQUEwQixFQUFFO2dCQUMxQixTQUFTLEVBQUUsdUNBQXlCLENBQUMsc0NBQXNDO2dCQUMzRSx1QkFBdUIsRUFBRSxLQUFLO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsZ0JBQWdCLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSx1REFBeUIsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRTtZQUNqRSwwQkFBMEIsRUFBRTtnQkFDMUIsdUJBQXVCLEVBQUUsSUFBSTtnQkFDN0IsMEJBQTBCLEVBQUUsNkNBQWlDLENBQUMsRUFBRTthQUNqRTtTQUNGLENBQUMsQ0FBQztRQUVILDJEQUEyRDtRQUMzRCxlQUFlLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsY0FBYyxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELG1CQUFtQixHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RCxlQUFlLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0QsZUFBZSxDQUFDLHFCQUFxQixDQUFDLHNCQUFzQixFQUFFLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUNsRyxlQUFlLENBQUMscUJBQXFCLENBQUMsa0NBQWtDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxzREFBc0QsRUFBRSxHQUFHLEVBQUU7UUFDaEUsZUFBZSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO1lBQzdELFdBQVcsRUFBRTtnQkFDWCxTQUFTLEVBQUU7b0JBQ1QsUUFBUSxFQUFFLHlDQUF5QztpQkFDcEQ7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN6RCxjQUFjLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7WUFDNUQsV0FBVyxFQUFFO2dCQUNYLFNBQVMsRUFBRTtvQkFDVCxRQUFRLEVBQUUsd0NBQXdDO2lCQUNuRDthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQ2pELG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO1lBQ2pFLFdBQVcsRUFBRTtnQkFDWCxTQUFTLEVBQUU7b0JBQ1QsUUFBUSxFQUFFLDRDQUE0QztpQkFDdkQ7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtRQUN2QyxlQUFlLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEQsd0JBQXdCLEVBQUU7Z0JBQ3hCLFNBQVMsRUFBRSxDQUFDO3dCQUNWLE1BQU0sRUFBRSxnQkFBZ0I7d0JBQ3hCLE1BQU0sRUFBRSxPQUFPO3dCQUNmLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRTtxQkFDL0MsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9jayc7XG5pbXBvcnQgeyBCZWRyb2NrQ3Jvc3NSZWdpb25JbmZlcmVuY2VQcmVmaXggfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsnO1xuaW1wb3J0IHsgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyB9IGZyb20gJy4uL2JlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5cbmRlc2NyaWJlKCdCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nJywgKCkgPT4ge1xuICBsZXQgZGVmYXVsdFN0YWNrOiBTdGFjaztcbiAgbGV0IGN1c3RvbVN0YWNrOiBTdGFjaztcbiAgbGV0IGNyb3NzUmVnaW9uU3RhY2s6IFN0YWNrO1xuICBsZXQgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgbGV0IGN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgbGV0IGNyb3NzUmVnaW9uVGVtcGxhdGU6IFRlbXBsYXRlO1xuXG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgLy8gQ3JlYXRlIGFsbCBzdGFja3MgYW5kIGNvbnN0cnVjdHMgZmlyc3RcbiAgICBkZWZhdWx0U3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBuZXcgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyhkZWZhdWx0U3RhY2ssICdEZWZhdWx0VGVzdCcsIHt9KTtcblxuICAgIGN1c3RvbVN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgbmV3IEJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmcoY3VzdG9tU3RhY2ssICdDdXN0b21UZXN0Jywge1xuICAgICAgY2xhc3NpZmljYXRpb25CZWRyb2NrTW9kZWw6IHtcbiAgICAgICAgZm1Nb2RlbElkOiBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19IQUlLVV8yMDI0MDMwN19WMV8wLFxuICAgICAgICB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY3Jvc3NSZWdpb25TdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIG5ldyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nKGNyb3NzUmVnaW9uU3RhY2ssICdDcm9zc1JlZ2lvblRlc3QnLCB7XG4gICAgICBjbGFzc2lmaWNhdGlvbkJlZHJvY2tNb2RlbDoge1xuICAgICAgICB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZTogdHJ1ZSxcbiAgICAgICAgY3Jvc3NSZWdpb25JbmZlcmVuY2VQcmVmaXg6IEJlZHJvY2tDcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeC5FVSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSB0ZW1wbGF0ZXMgb25jZSBhZnRlciBhbGwgY29uc3RydWN0cyBhcmUgY3JlYXRlZFxuICAgIGRlZmF1bHRUZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhkZWZhdWx0U3RhY2spO1xuICAgIGN1c3RvbVRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKGN1c3RvbVN0YWNrKTtcbiAgICBjcm9zc1JlZ2lvblRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKGNyb3NzUmVnaW9uU3RhY2spO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIGJhc2ljIGluZnJhc3RydWN0dXJlJywgKCkgPT4ge1xuICAgIGRlZmF1bHRUZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHt9KTtcbiAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlNRUzo6UXVldWUnLCB7fSk7XG4gICAgZGVmYXVsdFRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpEeW5hbW9EQjo6VGFibGUnLCB7IEJpbGxpbmdNb2RlOiAnUEFZX1BFUl9SRVFVRVNUJyB9KTtcbiAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsIHt9KTtcbiAgICBkZWZhdWx0VGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCA1KTtcbiAgfSk7XG5cbiAgdGVzdCgndXNlcyBkZWZhdWx0IG1vZGVsIHdpdGggY3Jvc3MtcmVnaW9uIHByZWZpeCBkaXNhYmxlZCcsICgpID0+IHtcbiAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgICBNT0RFTF9JRDogJ2FudGhyb3BpYy5jbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTQtdjE6MCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCd1c2VzIGN1c3RvbSBtb2RlbCB3aXRob3V0IGNyb3NzLXJlZ2lvbiBwcmVmaXgnLCAoKSA9PiB7XG4gICAgY3VzdG9tVGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgICBNT0RFTF9JRDogJ2FudGhyb3BpYy5jbGF1ZGUtMy1oYWlrdS0yMDI0MDMwNy12MTowJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NvbmZpZ3VyZXMgY3VzdG9tIGNyb3NzLXJlZ2lvbiBwcmVmaXgnLCAoKSA9PiB7XG4gICAgY3Jvc3NSZWdpb25UZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgIFZhcmlhYmxlczoge1xuICAgICAgICAgIE1PREVMX0lEOiAnZXUuYW50aHJvcGljLmNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNC12MTowJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgYmVkcm9jayBwZXJtaXNzaW9ucycsICgpID0+IHtcbiAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OklBTTo6Um9sZScsIHtcbiAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDoge1xuICAgICAgICBTdGF0ZW1lbnQ6IFt7XG4gICAgICAgICAgQWN0aW9uOiAnc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICBQcmluY2lwYWw6IHsgU2VydmljZTogJ2xhbWJkYS5hbWF6b25hd3MuY29tJyB9LFxuICAgICAgICB9XSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha';
|
|
2
|
+
import { RemovalPolicy } from 'aws-cdk-lib';
|
|
3
|
+
import { PolicyStatement, Role } from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import { Key } from 'aws-cdk-lib/aws-kms';
|
|
5
|
+
import { LayerVersion } from 'aws-cdk-lib/aws-lambda';
|
|
6
|
+
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
|
|
7
|
+
import { Construct } from 'constructs';
|
|
8
|
+
import { LogGroupDataProtectionProps, ObservableProps } from '../../utilities';
|
|
9
|
+
import { BedrockModelProps } from '../bedrock';
|
|
10
|
+
import { Network } from '../foundation';
|
|
11
|
+
export interface AgentToolsLocationDefinition {
|
|
12
|
+
readonly bucketName: string;
|
|
13
|
+
readonly key: string;
|
|
14
|
+
readonly isFile: boolean;
|
|
15
|
+
readonly isZipArchive: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parameters that influences the behavior of the agent
|
|
19
|
+
*/
|
|
20
|
+
export interface AgentDefinitionProps {
|
|
21
|
+
/**
|
|
22
|
+
* Configuration for the Bedrock Model to be used
|
|
23
|
+
*/
|
|
24
|
+
readonly bedrockModel: BedrockModelProps;
|
|
25
|
+
/**
|
|
26
|
+
* The system prompt of the agent
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
readonly systemPrompt: Asset;
|
|
30
|
+
/**
|
|
31
|
+
* List of tools defined in python files. This tools would automatically
|
|
32
|
+
* be loaded by the agent. You can also use this to incorporate other specialized
|
|
33
|
+
* agents as tools.
|
|
34
|
+
*/
|
|
35
|
+
readonly tools?: Asset[];
|
|
36
|
+
/**
|
|
37
|
+
* Any dependencies needed by the provided tools
|
|
38
|
+
*/
|
|
39
|
+
readonly lambdaLayers?: LayerVersion[];
|
|
40
|
+
/**
|
|
41
|
+
* If tools need additional IAM permissions, these statements
|
|
42
|
+
* would be attached to the Agent's IAM role
|
|
43
|
+
*/
|
|
44
|
+
readonly additionalPolicyStatementsForTools?: PolicyStatement[];
|
|
45
|
+
}
|
|
46
|
+
export interface BaseAgentProps extends ObservableProps {
|
|
47
|
+
/**
|
|
48
|
+
* Name of the agent
|
|
49
|
+
*/
|
|
50
|
+
readonly agentName: string;
|
|
51
|
+
/**
|
|
52
|
+
* Agent related parameters
|
|
53
|
+
*/
|
|
54
|
+
readonly agentDefinition: AgentDefinitionProps;
|
|
55
|
+
/**
|
|
56
|
+
* Enable observability
|
|
57
|
+
*
|
|
58
|
+
* @default false
|
|
59
|
+
*/
|
|
60
|
+
readonly enableObservability?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* If the Agent would be running inside a VPC
|
|
63
|
+
*
|
|
64
|
+
* @default Agent would not be in a VPC
|
|
65
|
+
*/
|
|
66
|
+
readonly network?: Network;
|
|
67
|
+
/**
|
|
68
|
+
* Encryption key to encrypt agent environment variables
|
|
69
|
+
*
|
|
70
|
+
* @default new KMS Key would be created
|
|
71
|
+
*/
|
|
72
|
+
readonly encryptionKey?: Key;
|
|
73
|
+
/**
|
|
74
|
+
* Removal policy for resources created by this
|
|
75
|
+
* construct
|
|
76
|
+
*
|
|
77
|
+
* @default RemovalPolicy.DESTROY
|
|
78
|
+
*/
|
|
79
|
+
readonly removalPolicy?: RemovalPolicy;
|
|
80
|
+
}
|
|
81
|
+
export declare abstract class BaseAgent extends Construct {
|
|
82
|
+
abstract readonly agentFunction: PythonFunction;
|
|
83
|
+
readonly bedrockModel?: BedrockModelProps;
|
|
84
|
+
readonly agentRole: Role;
|
|
85
|
+
readonly encryptionKey: Key;
|
|
86
|
+
/** log group data protection configuration */
|
|
87
|
+
protected readonly logGroupDataProtection: LogGroupDataProtectionProps;
|
|
88
|
+
protected readonly agentToolsLocationDefinitions: AgentToolsLocationDefinition[];
|
|
89
|
+
constructor(scope: Construct, id: string, props: BaseAgentProps);
|
|
90
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BaseAgent = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
8
|
+
const aws_kms_1 = require("aws-cdk-lib/aws-kms");
|
|
9
|
+
const constructs_1 = require("constructs");
|
|
10
|
+
const utilities_1 = require("../../utilities");
|
|
11
|
+
const bedrock_1 = require("../bedrock");
|
|
12
|
+
class BaseAgent extends constructs_1.Construct {
|
|
13
|
+
constructor(scope, id, props) {
|
|
14
|
+
super(scope, id);
|
|
15
|
+
this.bedrockModel = props.agentDefinition.bedrockModel;
|
|
16
|
+
this.encryptionKey = props.encryptionKey || new aws_kms_1.Key(this, 'AgentEncryptionKey', {
|
|
17
|
+
enableKeyRotation: true,
|
|
18
|
+
removalPolicy: props.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
19
|
+
});
|
|
20
|
+
const inlinePolicies = {};
|
|
21
|
+
if (props.agentDefinition.additionalPolicyStatementsForTools && props.agentDefinition.additionalPolicyStatementsForTools.length > 0) {
|
|
22
|
+
inlinePolicies.ToolPermissions = new aws_iam_1.PolicyDocument({
|
|
23
|
+
statements: props.agentDefinition.additionalPolicyStatementsForTools,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
this.agentRole = new aws_iam_1.Role(this, `Agent-${props.agentName}-Role`, {
|
|
27
|
+
assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
|
|
28
|
+
inlinePolicies,
|
|
29
|
+
});
|
|
30
|
+
if (props.network) {
|
|
31
|
+
this.agentRole.addToPrincipalPolicy(utilities_1.LambdaIamUtils.generateLambdaVPCPermissions());
|
|
32
|
+
}
|
|
33
|
+
this.agentToolsLocationDefinitions = [];
|
|
34
|
+
if (props.agentDefinition.tools) {
|
|
35
|
+
for (const tool of props.agentDefinition.tools) {
|
|
36
|
+
tool.grantRead(this.agentRole);
|
|
37
|
+
this.agentToolsLocationDefinitions.push({
|
|
38
|
+
bucketName: tool.s3BucketName,
|
|
39
|
+
key: tool.s3ObjectKey,
|
|
40
|
+
isFile: tool.isFile,
|
|
41
|
+
isZipArchive: tool.isZipArchive,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
this.agentRole.addToPrincipalPolicy(bedrock_1.BedrockModelUtils.generateModelIAMPermissions(this, this.bedrockModel));
|
|
46
|
+
this.logGroupDataProtection = utilities_1.LogGroupDataProtectionUtils.handleDefault(this, props.logGroupDataProtection, props.removalPolicy);
|
|
47
|
+
if (props.enableObservability) {
|
|
48
|
+
aws_cdk_lib_1.PropertyInjectors.of(this).add(new utilities_1.LambdaObservabilityPropertyInjector(this.logGroupDataProtection));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.BaseAgent = BaseAgent;
|
|
53
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
54
|
+
BaseAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseAgent", version: "1.3.0" };
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2Jhc2UtYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSw2Q0FBK0Q7QUFDL0QsaURBQThGO0FBQzlGLGlEQUEwQztBQUcxQywyQ0FBdUM7QUFDdkMsK0NBQWlLO0FBQ2pLLHdDQUFrRTtBQXNGbEUsTUFBc0IsU0FBVSxTQUFRLHNCQUFTO0lBUy9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLGFBQUcsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDOUUsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSwyQkFBYSxDQUFDLE9BQU87U0FDNUQsQ0FBQyxDQUFDO1FBR0gsTUFBTSxjQUFjLEdBQW1DLEVBQUUsQ0FBQztRQUUxRCxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsa0NBQWtDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEksY0FBYyxDQUFDLGVBQWUsR0FBRyxJQUFJLHdCQUFjLENBQUM7Z0JBQ2xELFVBQVUsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLGtDQUFrQzthQUNyRSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxLQUFLLENBQUMsU0FBUyxPQUFPLEVBQUU7WUFDL0QsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsc0JBQXNCLENBQUM7WUFDdkQsY0FBYztTQUNmLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsMEJBQWMsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUVELElBQUksQ0FBQyw2QkFBNkIsR0FBRyxFQUFFLENBQUM7UUFFeEMsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRS9CLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUM7b0JBQ3RDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWTtvQkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXO29CQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ25CLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtpQkFDaEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLDJCQUFpQixDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM1RyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsdUNBQTJCLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpJLElBQUksS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDOUIsK0JBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FDNUIsSUFBSSwrQ0FBbUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FDckUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOztBQTFESCw4QkEyREMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFB5dGhvbkZ1bmN0aW9uIH0gZnJvbSAnQGF3cy1jZGsvYXdzLWxhbWJkYS1weXRob24tYWxwaGEnO1xuaW1wb3J0IHsgUHJvcGVydHlJbmplY3RvcnMsIFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCBSb2xlLCBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IExheWVyVmVyc2lvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTGFtYmRhSWFtVXRpbHMsIExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yLCBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHMsIExvZ0dyb3VwRGF0YVByb3RlY3Rpb25VdGlscywgT2JzZXJ2YWJsZVByb3BzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IEJlZHJvY2tNb2RlbFByb3BzLCBCZWRyb2NrTW9kZWxVdGlscyB9IGZyb20gJy4uL2JlZHJvY2snO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL2ZvdW5kYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb24ge1xuICByZWFkb25seSBidWNrZXROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBpc0ZpbGU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzWmlwQXJjaGl2ZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHRoYXQgaW5mbHVlbmNlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGFnZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnREZWZpbml0aW9uUHJvcHMge1xuICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQmVkcm9jayBNb2RlbCB0byBiZSB1c2VkXG4gICAgICovXG4gIHJlYWRvbmx5IGJlZHJvY2tNb2RlbDogQmVkcm9ja01vZGVsUHJvcHM7XG5cbiAgLyoqXG4gICAgICogVGhlIHN5c3RlbSBwcm9tcHQgb2YgdGhlIGFnZW50XG4gICAgICpcbiAgICAgKi9cbiAgcmVhZG9ubHkgc3lzdGVtUHJvbXB0OiBBc3NldDtcblxuICAvKipcbiAgICAgKiBMaXN0IG9mIHRvb2xzIGRlZmluZWQgaW4gcHl0aG9uIGZpbGVzLiBUaGlzIHRvb2xzIHdvdWxkIGF1dG9tYXRpY2FsbHlcbiAgICAgKiBiZSBsb2FkZWQgYnkgdGhlIGFnZW50LiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgdG8gaW5jb3Jwb3JhdGUgb3RoZXIgc3BlY2lhbGl6ZWRcbiAgICAgKiBhZ2VudHMgYXMgdG9vbHMuXG4gICAgICovXG4gIHJlYWRvbmx5IHRvb2xzPzogQXNzZXRbXTtcblxuICAvKipcbiAgICAgKiBBbnkgZGVwZW5kZW5jaWVzIG5lZWRlZCBieSB0aGUgcHJvdmlkZWQgdG9vbHNcbiAgICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhTGF5ZXJzPzogTGF5ZXJWZXJzaW9uW107XG5cbiAgLyoqXG4gICAgICogSWYgdG9vbHMgbmVlZCBhZGRpdGlvbmFsIElBTSBwZXJtaXNzaW9ucywgdGhlc2Ugc3RhdGVtZW50c1xuICAgICAqIHdvdWxkIGJlIGF0dGFjaGVkIHRvIHRoZSBBZ2VudCdzIElBTSByb2xlXG4gICAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yVG9vbHM/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQWdlbnRQcm9wcyBleHRlbmRzIE9ic2VydmFibGVQcm9wcyB7XG5cbiAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgYWdlbnRcbiAgICAgKi9cbiAgcmVhZG9ubHkgYWdlbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAgICogQWdlbnQgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgICovXG4gIHJlYWRvbmx5IGFnZW50RGVmaW5pdGlvbjogQWdlbnREZWZpbml0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAgICogRW5hYmxlIG9ic2VydmFiaWxpdHlcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgICAqIElmIHRoZSBBZ2VudCB3b3VsZCBiZSBydW5uaW5nIGluc2lkZSBhIFZQQ1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgQWdlbnQgd291bGQgbm90IGJlIGluIGEgVlBDXG4gICAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrO1xuXG4gIC8qKlxuICAgICAqIEVuY3J5cHRpb24ga2V5IHRvIGVuY3J5cHQgYWdlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBuZXcgS01TIEtleSB3b3VsZCBiZSBjcmVhdGVkXG4gICAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBLZXk7XG5cbiAgLyoqXG4gICAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoaXNcbiAgICAgKiBjb25zdHJ1Y3RcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBZ2VudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhZ2VudEZ1bmN0aW9uOiBQeXRob25GdW5jdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IGJlZHJvY2tNb2RlbD86IEJlZHJvY2tNb2RlbFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSb2xlOiBSb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogS2V5O1xuICAvKiogbG9nIGdyb3VwIGRhdGEgcHJvdGVjdGlvbiBjb25maWd1cmF0aW9uICovXG4gIHByb3RlY3RlZCByZWFkb25seSBsb2dHcm91cERhdGFQcm90ZWN0aW9uOiBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHM7XG4gIHByb3RlY3RlZCByZWFkb25seSBhZ2VudFRvb2xzTG9jYXRpb25EZWZpbml0aW9uczogQWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbltdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCYXNlQWdlbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5iZWRyb2NrTW9kZWwgPSBwcm9wcy5hZ2VudERlZmluaXRpb24uYmVkcm9ja01vZGVsO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXkgfHwgbmV3IEtleSh0aGlzLCAnQWdlbnRFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuXG4gICAgY29uc3QgaW5saW5lUG9saWNpZXM6IFJlY29yZDxzdHJpbmcsIFBvbGljeURvY3VtZW50PiA9IHt9O1xuXG4gICAgaWYgKHByb3BzLmFnZW50RGVmaW5pdGlvbi5hZGRpdGlvbmFsUG9saWN5U3RhdGVtZW50c0ZvclRvb2xzICYmIHByb3BzLmFnZW50RGVmaW5pdGlvbi5hZGRpdGlvbmFsUG9saWN5U3RhdGVtZW50c0ZvclRvb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlubGluZVBvbGljaWVzLlRvb2xQZXJtaXNzaW9ucyA9IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgIHN0YXRlbWVudHM6IHByb3BzLmFnZW50RGVmaW5pdGlvbi5hZGRpdGlvbmFsUG9saWN5U3RhdGVtZW50c0ZvclRvb2xzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZ2VudFJvbGUgPSBuZXcgUm9sZSh0aGlzLCBgQWdlbnQtJHtwcm9wcy5hZ2VudE5hbWV9LVJvbGVgLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgaW5saW5lUG9saWNpZXMsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMubmV0d29yaykge1xuICAgICAgdGhpcy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koTGFtYmRhSWFtVXRpbHMuZ2VuZXJhdGVMYW1iZGFWUENQZXJtaXNzaW9ucygpKTtcbiAgICB9XG5cbiAgICB0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zID0gW107XG5cbiAgICBpZiAocHJvcHMuYWdlbnREZWZpbml0aW9uLnRvb2xzKSB7XG4gICAgICBmb3IgKGNvbnN0IHRvb2wgb2YgcHJvcHMuYWdlbnREZWZpbml0aW9uLnRvb2xzKSB7XG4gICAgICAgIHRvb2wuZ3JhbnRSZWFkKHRoaXMuYWdlbnRSb2xlKTtcblxuICAgICAgICB0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zLnB1c2goe1xuICAgICAgICAgIGJ1Y2tldE5hbWU6IHRvb2wuczNCdWNrZXROYW1lLFxuICAgICAgICAgIGtleTogdG9vbC5zM09iamVjdEtleSxcbiAgICAgICAgICBpc0ZpbGU6IHRvb2wuaXNGaWxlLFxuICAgICAgICAgIGlzWmlwQXJjaGl2ZTogdG9vbC5pc1ppcEFyY2hpdmUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYWdlbnRSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KEJlZHJvY2tNb2RlbFV0aWxzLmdlbmVyYXRlTW9kZWxJQU1QZXJtaXNzaW9ucyh0aGlzLCB0aGlzLmJlZHJvY2tNb2RlbCkpO1xuICAgIHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiA9IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25VdGlscy5oYW5kbGVEZWZhdWx0KHRoaXMsIHByb3BzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24sIHByb3BzLnJlbW92YWxQb2xpY3kpO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgIFByb3BlcnR5SW5qZWN0b3JzLm9mKHRoaXMpLmFkZChcbiAgICAgICAgbmV3IExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yKHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiksXG4gICAgICApO1xuICAgIH1cbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { BaseAgent, BaseAgentProps } from './base-agent';
|
|
4
|
+
export interface BatchAgentProps extends BaseAgentProps {
|
|
5
|
+
readonly prompt: string;
|
|
6
|
+
readonly expectJson?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class BatchAgent extends BaseAgent {
|
|
9
|
+
readonly agentFunction: PythonFunction;
|
|
10
|
+
constructor(scope: Construct, id: string, props: BatchAgentProps);
|
|
11
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BatchAgent = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
8
|
+
const path = require("path");
|
|
9
|
+
const aws_lambda_python_alpha_1 = require("@aws-cdk/aws-lambda-python-alpha");
|
|
10
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
11
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
12
|
+
const base_agent_1 = require("./base-agent");
|
|
13
|
+
const utilities_1 = require("../../utilities");
|
|
14
|
+
const bedrock_1 = require("../bedrock");
|
|
15
|
+
const custom_resource_1 = require("../custom-resource");
|
|
16
|
+
const default_agent_config_1 = require("./default-agent-config");
|
|
17
|
+
class BatchAgent extends base_agent_1.BaseAgent {
|
|
18
|
+
constructor(scope, id, props) {
|
|
19
|
+
super(scope, id, props);
|
|
20
|
+
const modelId = bedrock_1.BedrockModelUtils.deriveActualModelId(this.bedrockModel);
|
|
21
|
+
const metricNamespace = props.metricNamespace || utilities_1.DefaultObservabilityConfig.DEFAULT_METRIC_NAMESPACE;
|
|
22
|
+
const metricServiceName = props.metricServiceName || default_agent_config_1.DefaultAgentConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME;
|
|
23
|
+
const env = {
|
|
24
|
+
SYSTEM_PROMPT_S3_BUCKET_NAME: props.agentDefinition.systemPrompt.s3BucketName,
|
|
25
|
+
SYSTEM_PROMPT_S3_KEY: props.agentDefinition.systemPrompt.s3ObjectKey,
|
|
26
|
+
TOOLS_CONFIG: JSON.stringify(this.agentToolsLocationDefinitions),
|
|
27
|
+
MODEL_ID: modelId,
|
|
28
|
+
INVOKE_TYPE: 'batch',
|
|
29
|
+
PROMPT: props.prompt,
|
|
30
|
+
EXPECT_JSON: props.expectJson ? 'True' : '',
|
|
31
|
+
...utilities_1.PowertoolsConfig.generateDefaultLambdaConfig(props.enableObservability, metricNamespace, metricServiceName),
|
|
32
|
+
};
|
|
33
|
+
const { account, region } = aws_cdk_lib_1.Stack.of(this);
|
|
34
|
+
const agentLambdaLogPermissionsResult = utilities_1.LambdaIamUtils.createLogsPermissions({
|
|
35
|
+
account,
|
|
36
|
+
region,
|
|
37
|
+
scope: this,
|
|
38
|
+
functionName: props.agentName,
|
|
39
|
+
enableObservability: props.enableObservability,
|
|
40
|
+
});
|
|
41
|
+
this.agentFunction = new aws_lambda_python_alpha_1.PythonFunction(this, 'BatchAgentFunction', {
|
|
42
|
+
functionName: agentLambdaLogPermissionsResult.uniqueFunctionName,
|
|
43
|
+
architecture: aws_lambda_1.Architecture.X86_64,
|
|
44
|
+
entry: path.join(__dirname, 'resources/default-strands-agent'),
|
|
45
|
+
role: this.agentRole,
|
|
46
|
+
index: 'batch.py',
|
|
47
|
+
runtime: custom_resource_1.DefaultRuntimes.PYTHON,
|
|
48
|
+
layers: props.agentDefinition.lambdaLayers,
|
|
49
|
+
timeout: aws_cdk_lib_1.Duration.minutes(10),
|
|
50
|
+
memorySize: 1024,
|
|
51
|
+
environment: env,
|
|
52
|
+
environmentEncryption: this.encryptionKey,
|
|
53
|
+
vpc: props.network ? props.network.vpc : undefined,
|
|
54
|
+
vpcSubnets: props.network ? props.network.applicationSubnetSelection() : undefined,
|
|
55
|
+
});
|
|
56
|
+
for (const s of agentLambdaLogPermissionsResult.policyStatements) {
|
|
57
|
+
this.agentRole.addToPrincipalPolicy(s);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.BatchAgent = BatchAgent;
|
|
62
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
63
|
+
BatchAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BatchAgent", version: "1.3.0" };
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9iYXRjaC1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFFdEMsNkJBQTZCO0FBQzdCLDhFQUFrRTtBQUNsRSw2Q0FBOEM7QUFDOUMsdURBQXNEO0FBRXRELDZDQUF5RDtBQUN6RCwrQ0FBK0Y7QUFDL0Ysd0NBQStDO0FBQy9DLHdEQUFxRDtBQUNyRCxpRUFBNEQ7QUFPNUQsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFHdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBRywyQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekUsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxzQ0FBMEIsQ0FBQyx3QkFBd0IsQ0FBQztRQUNyRyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSx5Q0FBa0IsQ0FBQyxxQ0FBcUMsQ0FBQztRQUU5RyxNQUFNLEdBQUcsR0FBMkI7WUFDbEMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUM3RSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxXQUFXO1lBQ3BFLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztZQUNoRSxRQUFRLEVBQUUsT0FBTztZQUNqQixXQUFXLEVBQUUsT0FBTztZQUNwQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMzQyxHQUFHLDRCQUFnQixDQUFDLDJCQUEyQixDQUM3QyxLQUFLLENBQUMsbUJBQW1CLEVBQ3pCLGVBQWUsRUFDZixpQkFBaUIsQ0FDbEI7U0FDRixDQUFDO1FBRUYsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLCtCQUErQixHQUFHLDBCQUFjLENBQUMscUJBQXFCLENBQUM7WUFDM0UsT0FBTztZQUNQLE1BQU07WUFDTixLQUFLLEVBQUUsSUFBSTtZQUNYLFlBQVksRUFBRSxLQUFLLENBQUMsU0FBUztZQUM3QixtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1NBQy9DLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx3Q0FBYyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNsRSxZQUFZLEVBQUUsK0JBQStCLENBQUMsa0JBQWtCO1lBQ2hFLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGlDQUFpQyxDQUFDO1lBQzlELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztZQUNwQixLQUFLLEVBQUUsVUFBVTtZQUNqQixPQUFPLEVBQUUsaUNBQWUsQ0FBQyxNQUFNO1lBQy9CLE1BQU0sRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQVk7WUFDMUMsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsR0FBRztZQUNoQixxQkFBcUIsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUN6QyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEQsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNuRixDQUFDLENBQUM7UUFFSCxLQUFLLE1BQU0sQ0FBQyxJQUFJLCtCQUErQixDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzs7QUFwREgsZ0NBcURDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUHl0aG9uRnVuY3Rpb24gfSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZUFnZW50LCBCYXNlQWdlbnRQcm9wcyB9IGZyb20gJy4vYmFzZS1hZ2VudCc7XG5pbXBvcnQgeyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZywgTGFtYmRhSWFtVXRpbHMsIFBvd2VydG9vbHNDb25maWcgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgQmVkcm9ja01vZGVsVXRpbHMgfSBmcm9tICcuLi9iZWRyb2NrJztcbmltcG9ydCB7IERlZmF1bHRSdW50aW1lcyB9IGZyb20gJy4uL2N1c3RvbS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBEZWZhdWx0QWdlbnRDb25maWcgfSBmcm9tICcuL2RlZmF1bHQtYWdlbnQtY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXRjaEFnZW50UHJvcHMgZXh0ZW5kcyBCYXNlQWdlbnRQcm9wcyB7XG4gIHJlYWRvbmx5IHByb21wdDogc3RyaW5nO1xuICByZWFkb25seSBleHBlY3RKc29uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJhdGNoQWdlbnQgZXh0ZW5kcyBCYXNlQWdlbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRGdW5jdGlvbjogUHl0aG9uRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhdGNoQWdlbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IG1vZGVsSWQgPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVBY3R1YWxNb2RlbElkKHRoaXMuYmVkcm9ja01vZGVsKTtcbiAgICBjb25zdCBtZXRyaWNOYW1lc3BhY2UgPSBwcm9wcy5tZXRyaWNOYW1lc3BhY2UgfHwgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcuREVGQVVMVF9NRVRSSUNfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG1ldHJpY1NlcnZpY2VOYW1lID0gcHJvcHMubWV0cmljU2VydmljZU5hbWUgfHwgRGVmYXVsdEFnZW50Q29uZmlnLkRFRkFVTFRfT0JTRVJWQUJJTElUWV9NRVRSSUNfU1ZDX05BTUU7XG5cbiAgICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBTWVNURU1fUFJPTVBUX1MzX0JVQ0tFVF9OQU1FOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzQnVja2V0TmFtZSxcbiAgICAgIFNZU1RFTV9QUk9NUFRfUzNfS0VZOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzT2JqZWN0S2V5LFxuICAgICAgVE9PTFNfQ09ORklHOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zKSxcbiAgICAgIE1PREVMX0lEOiBtb2RlbElkLFxuICAgICAgSU5WT0tFX1RZUEU6ICdiYXRjaCcsXG4gICAgICBQUk9NUFQ6IHByb3BzLnByb21wdCxcbiAgICAgIEVYUEVDVF9KU09OOiBwcm9wcy5leHBlY3RKc29uID8gJ1RydWUnIDogJycsXG4gICAgICAuLi5Qb3dlcnRvb2xzQ29uZmlnLmdlbmVyYXRlRGVmYXVsdExhbWJkYUNvbmZpZyhcbiAgICAgICAgcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICAgICAgbWV0cmljTmFtZXNwYWNlLFxuICAgICAgICBtZXRyaWNTZXJ2aWNlTmFtZSxcbiAgICAgICksXG4gICAgfTtcblxuICAgIGNvbnN0IHsgYWNjb3VudCwgcmVnaW9uIH0gPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBhZ2VudExhbWJkYUxvZ1Blcm1pc3Npb25zUmVzdWx0ID0gTGFtYmRhSWFtVXRpbHMuY3JlYXRlTG9nc1Blcm1pc3Npb25zKHtcbiAgICAgIGFjY291bnQsXG4gICAgICByZWdpb24sXG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIGZ1bmN0aW9uTmFtZTogcHJvcHMuYWdlbnROYW1lLFxuICAgICAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWdlbnRGdW5jdGlvbiA9IG5ldyBQeXRob25GdW5jdGlvbih0aGlzLCAnQmF0Y2hBZ2VudEZ1bmN0aW9uJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBhZ2VudExhbWJkYUxvZ1Blcm1pc3Npb25zUmVzdWx0LnVuaXF1ZUZ1bmN0aW9uTmFtZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLlg4Nl82NCxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudCcpLFxuICAgICAgcm9sZTogdGhpcy5hZ2VudFJvbGUsXG4gICAgICBpbmRleDogJ2JhdGNoLnB5JyxcbiAgICAgIHJ1bnRpbWU6IERlZmF1bHRSdW50aW1lcy5QWVRIT04sXG4gICAgICBsYXllcnM6IHByb3BzLmFnZW50RGVmaW5pdGlvbi5sYW1iZGFMYXllcnMsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEwKSxcbiAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZW52aXJvbm1lbnRFbmNyeXB0aW9uOiB0aGlzLmVuY3J5cHRpb25LZXksXG4gICAgICB2cGM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLnZwYyA6IHVuZGVmaW5lZCxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLmFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHMgb2YgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC5wb2xpY3lTdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzKTtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DefaultAgentConfig = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
class DefaultAgentConfig {
|
|
7
|
+
}
|
|
8
|
+
exports.DefaultAgentConfig = DefaultAgentConfig;
|
|
9
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
10
|
+
DefaultAgentConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultAgentConfig", version: "1.3.0" };
|
|
11
|
+
DefaultAgentConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = 'agent';
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1hZ2VudC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9kZWZhdWx0LWFnZW50LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE1BQWEsa0JBQWtCOztBQUEvQixnREFFQzs7O0FBRHdCLHdEQUFxQyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBEZWZhdWx0QWdlbnRDb25maWcge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfT0JTRVJWQUJJTElUWV9NRVRSSUNfU1ZDX05BTUUgPSAnYWdlbnQnO1xufSJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base-agent"), exports);
|
|
18
|
+
__exportStar(require("./batch-agent"), exports);
|
|
19
|
+
__exportStar(require("./default-agent-config"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQTZCO0FBQzdCLGdEQUE4QjtBQUM5Qix5REFBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Jhc2UtYWdlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXRjaC1hZ2VudCc7XG5leHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtYWdlbnQtY29uZmlnJzsiXX0=
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
from strands import Agent, tool
|
|
4
|
+
from strands_tools import file_read
|
|
5
|
+
from aws_lambda_powertools import Metrics, Tracer
|
|
6
|
+
from aws_lambda_powertools.metrics import MetricUnit
|
|
7
|
+
from utils import download_and_load_system_prompt, download_tools, convert_tools_config_into_model
|
|
8
|
+
import boto3
|
|
9
|
+
|
|
10
|
+
metrics = Metrics()
|
|
11
|
+
tracer = Tracer()
|
|
12
|
+
s3 = boto3.client('s3')
|
|
13
|
+
|
|
14
|
+
def extract_json_from_text(text):
|
|
15
|
+
"""Extract JSON object from text body enclosed in ```json blocks or raw JSON."""
|
|
16
|
+
import re
|
|
17
|
+
|
|
18
|
+
# First try to find JSON in ```json blocks
|
|
19
|
+
match = re.search(r'```json\s*({.*?})\s*```', text, re.DOTALL)
|
|
20
|
+
if match:
|
|
21
|
+
try:
|
|
22
|
+
return json.loads(match.group(1))
|
|
23
|
+
except json.JSONDecodeError:
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
# If no ```json blocks, look for raw JSON objects in the text
|
|
27
|
+
json_match = re.search(r'({[^{}]*(?:{[^{}]*}[^{}]*)*})', text, re.DOTALL)
|
|
28
|
+
if json_match:
|
|
29
|
+
try:
|
|
30
|
+
return json.loads(json_match.group(1))
|
|
31
|
+
except json.JSONDecodeError:
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
def parse_s3_path(s3_path):
|
|
37
|
+
# Remove s3:// prefix if present
|
|
38
|
+
path = s3_path.replace('s3://', '')
|
|
39
|
+
|
|
40
|
+
# Split into parts
|
|
41
|
+
parts = path.split('/', 1)
|
|
42
|
+
bucket = parts[0]
|
|
43
|
+
|
|
44
|
+
if len(parts) == 1:
|
|
45
|
+
return bucket, '', ''
|
|
46
|
+
|
|
47
|
+
# Key is the prefix (includes filename)
|
|
48
|
+
prefix = parts[1]
|
|
49
|
+
filename = prefix.split('/')[-1]
|
|
50
|
+
|
|
51
|
+
return bucket, prefix, filename
|
|
52
|
+
|
|
53
|
+
def download_attached_document(event):
|
|
54
|
+
bucket = event['content']['bucket']
|
|
55
|
+
key = event['content']['key']
|
|
56
|
+
|
|
57
|
+
# Download file to /tmp
|
|
58
|
+
local_path = f"/tmp/{key.split('/')[-1]}"
|
|
59
|
+
s3.download_file(bucket, key, local_path)
|
|
60
|
+
|
|
61
|
+
return local_path
|
|
62
|
+
|
|
63
|
+
tools_config = convert_tools_config_into_model(os.getenv('TOOLS_CONFIG', '{}'))
|
|
64
|
+
agent_tools = download_tools(tools_config)
|
|
65
|
+
system_prompt = download_and_load_system_prompt(os.environ['SYSTEM_PROMPT_S3_BUCKET_NAME'], os.environ['SYSTEM_PROMPT_S3_KEY'])
|
|
66
|
+
|
|
67
|
+
@metrics.log_metrics
|
|
68
|
+
@tracer.capture_lambda_handler
|
|
69
|
+
def handler(event, context):
|
|
70
|
+
model_id = os.getenv("MODEL_ID")
|
|
71
|
+
prompt = os.getenv("PROMPT")
|
|
72
|
+
expect_json:bool = bool(os.getenv("EXPECT_JSON", ""))
|
|
73
|
+
invoke_type = os.environ["INVOKE_TYPE"]
|
|
74
|
+
content_type = event['contentType']
|
|
75
|
+
|
|
76
|
+
tracer.put_annotation(key="invoke_type", value=invoke_type)
|
|
77
|
+
metrics.add_dimension(name="invoke_type", value=invoke_type)
|
|
78
|
+
|
|
79
|
+
if prompt is None:
|
|
80
|
+
prompt = "Analyze the attached document and verify the information using the provided tools."
|
|
81
|
+
|
|
82
|
+
if 'classificationResult' in event:
|
|
83
|
+
classification = event['classificationResult']['documentClassification']
|
|
84
|
+
prompt = prompt.replace("[ACTUAL_CLASSIFICATION]", classification)
|
|
85
|
+
|
|
86
|
+
if content_type == 'file' and event['content']['location'] == 's3':
|
|
87
|
+
local_path_attached_doc = download_attached_document(event)
|
|
88
|
+
prompt += f" Attached document is located in {local_path_attached_doc}"
|
|
89
|
+
elif content_type == 'data':
|
|
90
|
+
prompt += f" Attached document content are as follows: {event['content']['data']}"
|
|
91
|
+
|
|
92
|
+
agent = Agent(model=model_id, tools=agent_tools + [file_read], system_prompt=system_prompt)
|
|
93
|
+
response = agent(prompt)
|
|
94
|
+
|
|
95
|
+
metrics.add_metric(name="SuccessfulAgentInvocation", unit=MetricUnit.Count, value=1)
|
|
96
|
+
response_text = response.message["content"][0]["text"] # type: ignore
|
|
97
|
+
return {
|
|
98
|
+
"result": extract_json_from_text(response_text) if expect_json else response_text
|
|
99
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import boto3
|
|
3
|
+
import json
|
|
4
|
+
from models import ToolLocationDefinition
|
|
5
|
+
|
|
6
|
+
s3 = boto3.client('s3')
|
|
7
|
+
|
|
8
|
+
def convert_tools_config_into_model(config: str) -> list[ToolLocationDefinition]:
|
|
9
|
+
definitions: list[ToolLocationDefinition] = []
|
|
10
|
+
|
|
11
|
+
tools_raw = json.loads(config)
|
|
12
|
+
|
|
13
|
+
for t in tools_raw:
|
|
14
|
+
definitions.append(ToolLocationDefinition.model_validate_json(json.dumps(t)))
|
|
15
|
+
|
|
16
|
+
return definitions
|
|
17
|
+
|
|
18
|
+
def download_tools(tools: list[ToolLocationDefinition]) -> list[str]:
|
|
19
|
+
local_tools_location: list[str] = []
|
|
20
|
+
|
|
21
|
+
for t in tools:
|
|
22
|
+
if t.isFile:
|
|
23
|
+
local_location = f"/tmp/{os.path.basename(t.key)}"
|
|
24
|
+
s3.download_file(t.bucketName, t.key, local_location)
|
|
25
|
+
local_tools_location.append(local_location)
|
|
26
|
+
|
|
27
|
+
return local_tools_location
|
|
28
|
+
|
|
29
|
+
def download_and_load_system_prompt(bucketName, key) -> str:
|
|
30
|
+
local_location = '/tmp/system_prompt.txt'
|
|
31
|
+
s3.download_file(bucketName, key, local_location)
|
|
32
|
+
|
|
33
|
+
with open(local_location, 'r') as file:
|
|
34
|
+
data = file.read()
|
|
35
|
+
|
|
36
|
+
return data
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { FoundationModelIdentifier } from 'aws-cdk-lib/aws-bedrock';
|
|
2
|
+
import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
/**
|
|
5
|
+
* Cross-region inference prefix options for Bedrock models.
|
|
6
|
+
* Used to configure inference profiles for improved availability and performance.
|
|
7
|
+
*/
|
|
8
|
+
export declare enum BedrockCrossRegionInferencePrefix {
|
|
9
|
+
/** US-based cross-region inference profile */
|
|
10
|
+
US = "us",
|
|
11
|
+
/** EU-based cross-region inference profile */
|
|
12
|
+
EU = "eu"
|
|
13
|
+
}
|
|
14
|
+
export interface BedrockModelProps {
|
|
15
|
+
/**
|
|
16
|
+
* Foundation model to use
|
|
17
|
+
*
|
|
18
|
+
* @default FoundationModelIdentifier.ANTHROPIC_CLAUDE_SONNET_4_20250514_V1_0
|
|
19
|
+
*/
|
|
20
|
+
readonly fmModelId?: FoundationModelIdentifier;
|
|
21
|
+
/**
|
|
22
|
+
* Enable cross-region inference for Bedrock models to improve availability and performance.
|
|
23
|
+
* When enabled, uses inference profiles instead of direct model invocation.
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
readonly useCrossRegionInference?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Prefix for cross-region inference configuration.
|
|
29
|
+
* Only used when useCrossRegionInference is true.
|
|
30
|
+
* @default BedrockCrossRegionInferencePrefix.US
|
|
31
|
+
*/
|
|
32
|
+
readonly crossRegionInferencePrefix?: BedrockCrossRegionInferencePrefix;
|
|
33
|
+
}
|
|
34
|
+
export declare class BedrockModelUtils {
|
|
35
|
+
static deriveActualModelId(props?: BedrockModelProps): string;
|
|
36
|
+
static generateModelIAMPermissions(scope: Construct, props?: BedrockModelProps): PolicyStatement;
|
|
37
|
+
private static deriveDefaults;
|
|
38
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BedrockModelUtils = exports.BedrockCrossRegionInferencePrefix = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
8
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
|
+
const aws_bedrock_1 = require("aws-cdk-lib/aws-bedrock");
|
|
10
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
11
|
+
/**
|
|
12
|
+
* Cross-region inference prefix options for Bedrock models.
|
|
13
|
+
* Used to configure inference profiles for improved availability and performance.
|
|
14
|
+
*/
|
|
15
|
+
var BedrockCrossRegionInferencePrefix;
|
|
16
|
+
(function (BedrockCrossRegionInferencePrefix) {
|
|
17
|
+
/** US-based cross-region inference profile */
|
|
18
|
+
BedrockCrossRegionInferencePrefix["US"] = "us";
|
|
19
|
+
/** EU-based cross-region inference profile */
|
|
20
|
+
BedrockCrossRegionInferencePrefix["EU"] = "eu";
|
|
21
|
+
})(BedrockCrossRegionInferencePrefix || (exports.BedrockCrossRegionInferencePrefix = BedrockCrossRegionInferencePrefix = {}));
|
|
22
|
+
class BedrockModelUtils {
|
|
23
|
+
static deriveActualModelId(props) {
|
|
24
|
+
const { fmModelId, crossRegionPrefix } = BedrockModelUtils.deriveDefaults(props);
|
|
25
|
+
return props?.useCrossRegionInference ? `${crossRegionPrefix}.${fmModelId.modelId}` : fmModelId.modelId;
|
|
26
|
+
}
|
|
27
|
+
static generateModelIAMPermissions(scope, props) {
|
|
28
|
+
const { account, region } = aws_cdk_lib_1.Stack.of(scope);
|
|
29
|
+
const { fmModelId, crossRegionPrefix } = BedrockModelUtils.deriveDefaults(props);
|
|
30
|
+
return new aws_iam_1.PolicyStatement({
|
|
31
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
32
|
+
actions: [
|
|
33
|
+
'bedrock:InvokeModel',
|
|
34
|
+
'bedrock:InvokeModelWithResponseStream',
|
|
35
|
+
],
|
|
36
|
+
resources: [
|
|
37
|
+
`arn:aws:bedrock:*::foundation-model/${fmModelId.modelId}`,
|
|
38
|
+
`arn:aws:bedrock:${region}:${account}:inference-profile/${crossRegionPrefix}.${fmModelId.modelId}`,
|
|
39
|
+
],
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
static deriveDefaults(props) {
|
|
43
|
+
const fmModelId = props?.fmModelId || aws_bedrock_1.FoundationModelIdentifier.ANTHROPIC_CLAUDE_SONNET_4_20250514_V1_0;
|
|
44
|
+
const crossRegionPrefix = props?.crossRegionInferencePrefix || BedrockCrossRegionInferencePrefix.US;
|
|
45
|
+
return {
|
|
46
|
+
fmModelId,
|
|
47
|
+
crossRegionPrefix,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.BedrockModelUtils = BedrockModelUtils;
|
|
52
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
53
|
+
BedrockModelUtils[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockModelUtils", version: "1.3.0" };
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYmVkcm9jay9iZWRyb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2Q0FBb0M7QUFDcEMseURBQW9FO0FBQ3BFLGlEQUE4RDtBQUc5RDs7O0dBR0c7QUFDSCxJQUFZLGlDQUtYO0FBTEQsV0FBWSxpQ0FBaUM7SUFDM0MsOENBQThDO0lBQzlDLDhDQUFTLENBQUE7SUFDVCw4Q0FBOEM7SUFDOUMsOENBQVMsQ0FBQTtBQUNYLENBQUMsRUFMVyxpQ0FBaUMsaURBQWpDLGlDQUFpQyxRQUs1QztBQXdCRCxNQUFhLGlCQUFpQjtJQUNyQixNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBeUI7UUFDekQsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRixPQUFPLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDMUcsQ0FBQztJQUVNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxLQUFnQixFQUFFLEtBQXlCO1FBQ25GLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRixPQUFPLElBQUkseUJBQWUsQ0FBQztZQUN6QixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRTtnQkFDUCxxQkFBcUI7Z0JBQ3JCLHVDQUF1QzthQUN4QztZQUNELFNBQVMsRUFBRTtnQkFDVCx1Q0FBdUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDMUQsbUJBQW1CLE1BQU0sSUFBSSxPQUFPLHNCQUFzQixpQkFBaUIsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO2FBQ25HO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBeUI7UUFDckQsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQVMsSUFBSSx1Q0FBeUIsQ0FBQyx1Q0FBdUMsQ0FBQztRQUN4RyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFBRSwwQkFBMEIsSUFBSSxpQ0FBaUMsQ0FBQyxFQUFFLENBQUM7UUFFcEcsT0FBTztZQUNMLFNBQVM7WUFDVCxpQkFBaUI7U0FDbEIsQ0FBQztJQUNKLENBQUM7O0FBL0JILDhDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2snO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIENyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcHJlZml4IG9wdGlvbnMgZm9yIEJlZHJvY2sgbW9kZWxzLlxuICogVXNlZCB0byBjb25maWd1cmUgaW5mZXJlbmNlIHByb2ZpbGVzIGZvciBpbXByb3ZlZCBhdmFpbGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuICovXG5leHBvcnQgZW51bSBCZWRyb2NrQ3Jvc3NSZWdpb25JbmZlcmVuY2VQcmVmaXgge1xuICAvKiogVVMtYmFzZWQgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBwcm9maWxlICovXG4gIFVTID0gJ3VzJyxcbiAgLyoqIEVVLWJhc2VkIGNyb3NzLXJlZ2lvbiBpbmZlcmVuY2UgcHJvZmlsZSAqL1xuICBFVSA9ICdldScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVkcm9ja01vZGVsUHJvcHMge1xuICAvKipcbiAgICAgKiBGb3VuZGF0aW9uIG1vZGVsIHRvIHVzZVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllci5BTlRIUk9QSUNfQ0xBVURFX1NPTk5FVF80XzIwMjUwNTE0X1YxXzBcbiAgICAgKi9cbiAgcmVhZG9ubHkgZm1Nb2RlbElkPzogRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllcjtcblxuICAvKipcbiAgICAgKiBFbmFibGUgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBmb3IgQmVkcm9jayBtb2RlbHMgdG8gaW1wcm92ZSBhdmFpbGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLlxuICAgICAqIFdoZW4gZW5hYmxlZCwgdXNlcyBpbmZlcmVuY2UgcHJvZmlsZXMgaW5zdGVhZCBvZiBkaXJlY3QgbW9kZWwgaW52b2NhdGlvbi5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICByZWFkb25seSB1c2VDcm9zc1JlZ2lvbkluZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKlxuICAgICAqIFByZWZpeCBmb3IgY3Jvc3MtcmVnaW9uIGluZmVyZW5jZSBjb25maWd1cmF0aW9uLlxuICAgICAqIE9ubHkgdXNlZCB3aGVuIHVzZUNyb3NzUmVnaW9uSW5mZXJlbmNlIGlzIHRydWUuXG4gICAgICogQGRlZmF1bHQgQmVkcm9ja0Nyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4LlVTXG4gICAgICovXG4gIHJlYWRvbmx5IGNyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4PzogQmVkcm9ja0Nyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4O1xufVxuXG5leHBvcnQgY2xhc3MgQmVkcm9ja01vZGVsVXRpbHMge1xuICBwdWJsaWMgc3RhdGljIGRlcml2ZUFjdHVhbE1vZGVsSWQocHJvcHM/OiBCZWRyb2NrTW9kZWxQcm9wcyk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBmbU1vZGVsSWQsIGNyb3NzUmVnaW9uUHJlZml4IH0gPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVEZWZhdWx0cyhwcm9wcyk7XG4gICAgcmV0dXJuIHByb3BzPy51c2VDcm9zc1JlZ2lvbkluZmVyZW5jZSA/IGAke2Nyb3NzUmVnaW9uUHJlZml4fS4ke2ZtTW9kZWxJZC5tb2RlbElkfWAgOiBmbU1vZGVsSWQubW9kZWxJZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVNb2RlbElBTVBlcm1pc3Npb25zKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIGNvbnN0IHsgYWNjb3VudCwgcmVnaW9uIH0gPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgeyBmbU1vZGVsSWQsIGNyb3NzUmVnaW9uUHJlZml4IH0gPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVEZWZhdWx0cyhwcm9wcyk7XG5cbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2JlZHJvY2s6SW52b2tlTW9kZWwnLFxuICAgICAgICAnYmVkcm9jazpJbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbScsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6Kjo6Zm91bmRhdGlvbi1tb2RlbC8ke2ZtTW9kZWxJZC5tb2RlbElkfWAsXG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6JHtyZWdpb259OiR7YWNjb3VudH06aW5mZXJlbmNlLXByb2ZpbGUvJHtjcm9zc1JlZ2lvblByZWZpeH0uJHtmbU1vZGVsSWQubW9kZWxJZH1gLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGRlcml2ZURlZmF1bHRzKHByb3BzPzogQmVkcm9ja01vZGVsUHJvcHMpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBmbU1vZGVsSWQgPSBwcm9wcz8uZm1Nb2RlbElkIHx8IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIuQU5USFJPUElDX0NMQVVERV9TT05ORVRfNF8yMDI1MDUxNF9WMV8wO1xuICAgIGNvbnN0IGNyb3NzUmVnaW9uUHJlZml4ID0gcHJvcHM/LmNyb3NzUmVnaW9uSW5mZXJlbmNlUHJlZml4IHx8IEJlZHJvY2tDcm9zc1JlZ2lvbkluZmVyZW5jZVByZWZpeC5VUztcblxuICAgIHJldHVybiB7XG4gICAgICBmbU1vZGVsSWQsXG4gICAgICBjcm9zc1JlZ2lvblByZWZpeCxcbiAgICB9O1xuICB9XG59Il19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './bedrock';
|