Skip to content

Commit eab0087

Browse files
author
Bob Strahan
committed
Merge branch 'develop' into feature/evaluation-inside-workflow
2 parents 6fb00c8 + f092098 commit eab0087

File tree

14 files changed

+69
-64
lines changed

14 files changed

+69
-64
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ SPDX-License-Identifier: MIT-0
1919
- Simplified CloudWatch results structure for improved readability and analysis
2020
- Updated error analyzer recommendations to leverage X-Ray insights for more accurate root cause identification
2121

22+
- **EU Region Support with Automatic Model Mapping**
23+
- Added support for deploying the solution in EU regions (eu-central-1, eu-west-1, etc.)
24+
- Automatic model endpoint mapping between US and EU regions for seamless deployment
25+
- Comprehensive model mapping table covering Amazon Nova and Anthropic Claude models
26+
- Intelligent fallback mappings when direct EU equivalents are unavailable
27+
- Quick Launch button for eu-central-1 region in README and deployment documentation
28+
- Complete technical documentation in `docs/eu-region-model-support.md` with best practices and troubleshooting
29+
2230
### Changed
2331

2432
- **Migrated Evaluation from EventBridge Trigger to Step Functions Workflow**

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ To quickly deploy the GenAI-IDP solution in your AWS account:
7070
| --------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
7171
| US West (Oregon) | us-west-2 | [![Launch Stack](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://us-west-2.console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/create/review?templateURL=https://s3.us-west-2.amazonaws.com/aws-ml-blog-us-west-2/artifacts/genai-idp/idp-main.yaml&stackName=IDP) |
7272
| US East (N.Virginia) | us-east-1 | [![Launch Stack](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/review?templateURL=https://s3.us-east-1.amazonaws.com/aws-ml-blog-us-east-1/artifacts/genai-idp/idp-main.yaml&stackName=IDP) |
73+
| EU Central (Frankfurt) | eu-central-1 | [![Launch Stack](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://eu-central-1.console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/create/review?templateURL=https://s3.eu-central-1.amazonaws.com/aws-ml-blog-eu-central-1/artifacts/genai-idp/idp-main.yaml&stackName=IDP) |
7374

7475
3. When the stack deploys for the first time, you'll receive an email with a temporary password to access the web UI
7576
4. Use this temporary password for your first login to set up a permanent password
@@ -138,6 +139,7 @@ To update an existing GenAIIDP stack to a new version:
138139
5. Enter the template URL:
139140
- us-west-2: `https://s3.us-west-2.amazonaws.com/aws-ml-blog-us-west-2/artifacts/genai-idp/idp-main.yaml`
140141
- us-east-1: `https://s3.us-east-1.amazonaws.com/aws-ml-blog-us-east-1/artifacts/genai-idp/idp-main.yaml`
142+
- eu-central-1: `https://s3.eu-central-1.amazonaws.com/aws-ml-blog-eu-central-1/artifacts/genai-idp/idp-main.yaml`
141143
6. Follow the prompts to update your stack, reviewing any parameter changes
142144
7. For detailed instructions, see the [Deployment Guide](./docs/deployment.md#updating-an-existing-stack)
143145

docs/deployment.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ The GenAI IDP Accelerator can be deployed using either the AWS CloudFormation co
2424
| ----------- | ----------- | ------ |
2525
| US West (Oregon) | us-west-2 | [![Launch Stack](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://us-west-2.console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/create/review?templateURL=https://s3.us-west-2.amazonaws.com/aws-ml-blog-us-west-2/artifacts/genai-idp/idp-main.yaml&stackName=IDP) |
2626
| US East (N.Virginia) | us-east-1 | [![Launch Stack](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/review?templateURL=https://s3.us-east-1.amazonaws.com/aws-ml-blog-us-east-1/artifacts/genai-idp/idp-main.yaml&stackName=IDP) |
27+
| EU Central (Frankfurt) | eu-central-1 | [![Launch Stack](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://eu-central-1.console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/create/review?templateURL=https://s3.eu-central-1.amazonaws.com/aws-ml-blog-eu-central-1/artifacts/genai-idp/idp-main.yaml&stackName=IDP) |
2728

2829
2. Review the template parameters and provide values as needed
2930
3. Check the acknowledgment box and click **Create stack**
@@ -309,6 +310,7 @@ To update an existing GenAIIDP deployment to a new version:
309310
6. Provide the new template URL:
310311
- us-west-2: `https://s3.us-west-2.amazonaws.com/aws-ml-blog-us-west-2/artifacts/genai-idp/idp-main.yaml`
311312
- us-east-1: `https://s3.us-east-1.amazonaws.com/aws-ml-blog-us-east-1/artifacts/genai-idp/idp-main.yaml`
313+
- eu-central-1: `https://s3.eu-central-1.amazonaws.com/aws-ml-blog-eu-central-1/artifacts/genai-idp/idp-main.yaml`
312314
7. Click "Next"
313315
8. Review the parameters and make any necessary changes
314316
- The update will preserve your existing parameter values

src/ui/.eslintrc.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"rules": {
1818
"no-console": "off",
1919
"no-alert": "off",
20-
"max-len": ["error", { "code": 120, "ignoreUrls": true, "ignoreTemplateLiterals": true }],
20+
"max-len": ["error", { "code": 120, "ignoreUrls": true, "ignoreTemplateLiterals": true, "ignoreComments": true }],
2121
"linebreak-style": ["error", "unix"],
2222
"react/jsx-filename-extension": [
2323
"warn",
@@ -56,6 +56,8 @@
5656
{
5757
"ignore": ["\\.css$"]
5858
}
59-
]
59+
],
60+
"react/require-default-props": "off",
61+
"react/default-props-match-prop-types": "off"
6062
}
6163
}

src/ui/package-lock.json

Lines changed: 0 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ui/src/components/common/ReprocessDocumentModal.jsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,4 @@ ReprocessDocumentModal.propTypes = {
6363
),
6464
};
6565

66-
67-
6866
export default ReprocessDocumentModal;

src/ui/src/components/common/confidence-alerts-utils.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,13 +293,15 @@ export const getFieldConfidenceInfo = (fieldName, explainabilityInfo, path = [],
293293
// Handle array indices
294294
const index = parseInt(pathSegment, 10);
295295
if (!Number.isNaN(index) && index >= 0 && index < currentExplainabilityData.length) {
296-
currentExplainabilityData = currentExplainabilityData[index]; // nosemgrep: javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop.prototype-pollution-loop - Index from controlled array iteration
296+
// nosemgrep: javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop
297+
currentExplainabilityData = currentExplainabilityData[index];
297298
} else {
298299
return { hasConfidenceInfo: false };
299300
}
300301
} else {
301302
// Handle object properties
302-
currentExplainabilityData = currentExplainabilityData[pathSegment]; // nosemgrep: javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop.prototype-pollution-loop - Index from controlled array iteration
303+
// nosemgrep: javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop
304+
currentExplainabilityData = currentExplainabilityData[pathSegment];
303305
}
304306
} else {
305307
return { hasConfidenceInfo: false };

src/ui/src/components/common/debug-utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export const debugSectionStructure = (section, sectionId = 'Unknown') => {
2929
);
3030

3131
if (hasConfidenceFields) {
32-
console.log(`Found confidence data in Output.${key}:`, value); // nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Data from trusted internal source only
32+
console.log(`Found confidence data in Output.${key}:`, value); // nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Data from trusted internal source only
3333
}
3434
}
3535
});

src/ui/src/components/configuration-layout/ConfigurationLayout.jsx

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -286,12 +286,16 @@ const ConfigurationLayout = () => {
286286
// Only check constraints if it's a valid number
287287
if (isValidNumber && itemProp.minimum !== undefined && numValue < itemProp.minimum) {
288288
errors.push({
289-
message: `Field '${itemKey}' in item ${index} of '${key}' must be at least ${itemProp.minimum}`,
289+
message:
290+
`Field '${itemKey}' in item ${index} of '${key}' must be ` +
291+
`at least ${itemProp.minimum}`,
290292
});
291293
}
292294
if (isValidNumber && itemProp.maximum !== undefined && numValue > itemProp.maximum) {
293295
errors.push({
294-
message: `Field '${itemKey}' in item ${index} of '${key}' must be at most ${itemProp.maximum}`,
296+
message:
297+
`Field '${itemKey}' in item ${index} of '${key}' must be ` +
298+
`at most ${itemProp.maximum}`,
295299
});
296300
}
297301
}
@@ -504,7 +508,8 @@ const ConfigurationLayout = () => {
504508
const compareWithDefault = (current, defaultObj, path = '') => {
505509
// Add debugging for granular assessment
506510
if (path.includes('granular')) {
507-
console.log(`DEBUG: compareWithDefault called with path '${path}':`, { // nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Debug logging with controlled internal data
511+
console.log(`DEBUG: compareWithDefault called with path '${path}':`, {
512+
// nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Debug logging with controlled internal data
508513
current,
509514
currentType: typeof current,
510515
defaultObj,
@@ -593,7 +598,8 @@ const ConfigurationLayout = () => {
593598

594599
// Add debugging for granular assessment
595600
if (newPath.includes('granular')) {
596-
console.log(`DEBUG: Comparing object key '${key}' at path '${newPath}':`, { // nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Debug logging with controlled internal data
601+
console.log(`DEBUG: Comparing object key '${key}' at path '${newPath}':`, {
602+
// nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Debug logging with controlled internal data
597603
currentValue: current[key],
598604
defaultValue: defaultObj[key],
599605
keyInCurrent: key in current,
@@ -611,7 +617,8 @@ const ConfigurationLayout = () => {
611617

612618
// Add debugging for granular assessment
613619
if (newPath.includes('granular')) {
614-
console.log(`DEBUG: Recursive call result for '${newPath}':`, { // nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Debug logging with controlled internal data
620+
console.log(`DEBUG: Recursive call result for '${newPath}':`, {
621+
// nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Debug logging with controlled internal data
615622
nestedResults,
616623
nestedResultsKeys: Object.keys(nestedResults),
617624
nestedResultsLength: Object.keys(nestedResults).length,
@@ -627,7 +634,8 @@ const ConfigurationLayout = () => {
627634

628635
// Handle primitive values
629636
if (current !== defaultObj) {
630-
console.log(`DEBUG: Primitive difference detected at path '${path}':`, { // nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Debug logging with controlled internal data
637+
console.log(`DEBUG: Primitive difference detected at path '${path}':`, {
638+
// nosemgrep: javascript.lang.security.audit.unsafe-formatstring.unsafe-formatstring - Debug logging with controlled internal data
631639
current,
632640
currentType: typeof current,
633641
defaultObj,
@@ -699,7 +707,7 @@ const ConfigurationLayout = () => {
699707
for (let i = 0; i < parts.length - 1; i += 1) {
700708
// Use += 1 instead of ++
701709
current[parts[i]] = {};
702-
current = current[parts[i]]; // nosemgrep: javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop.prototype-pollution-loop - Index from controlled array iteration
710+
current = current[parts[i]]; // nosemgrep: javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop.prototype-pollution-loop - Index from controlled array iteration
703711
}
704712

705713
// Set the value at the final path - IMPORTANT: preserve boolean false values!

src/ui/src/components/configuration-layout/FormView.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ const FormView = ({
590590
// Define renderField first as a function declaration
591591
function renderField(key, property, path = '') {
592592
const currentPath = path ? `${path}.${key}` : key;
593-
let value = getValueAtPath(formValues, currentPath);
593+
const value = getValueAtPath(formValues, currentPath);
594594

595595
// Add debugging for granular assessment
596596
if (currentPath.includes('granular')) {

0 commit comments

Comments
 (0)