Skip to content

Release v6.0.0 into Main#577

Merged
estohlmann merged 28 commits into
mainfrom
release/v6.0.0
Nov 26, 2025
Merged

Release v6.0.0 into Main#577
estohlmann merged 28 commits into
mainfrom
release/v6.0.0

Conversation

@github-actions
Copy link
Copy Markdown

@github-actions github-actions Bot commented Nov 26, 2025

v6.0.0

Happy Thanksgiving! We are proud to announce the launch of our next major version, 6.0.0! This launch aligns with AWS re:invent in Las Vegas from Dec 1-5th. LISA 6.0.0 includes major enhancements to LISA's RAG capabilities. It also includes a new standalone solution, LISA MCP.

We hope you enjoy this release as much as we enjoyed building it. Please reach out to our product team via the "Contact us" button in the readme. Our product roadmap is customer driven, and we want to hear your feedback, questions, and needs as we look to 2026.

Breaking Changes

  • API Token Table Migration: The API token table has been renamed and moved from the Serve stack to the API Base stack (LisaServeTokenTableLisaApiBaseTokenTable). Export all existing API keys before upgrading and recreate them in the new table after deployment. This affects admin keys, service accounts, and any programmatic API access.
  • Management Key Secret Migration: The LISA management key secret has been moved to the API Base stack with a new name format: ${deploymentName}-management-key (removed lisa- prefix). Update any scripts or integrations that reference the secret by name. The secret value will be auto-generated during deployment; export from AWS Secrets Manager before upgrading if you need to preserve the existing value. Code using the SSM parameter ${deploymentPrefix}/appManagementKeySecretName will continue to work without changes.
  • Existing Bedrock Knowledge Base Repositories must be redeployed to support the new collections infrastructure. This is a simple update operation that creates the necessary infrastructure for automatic data source collection creation. Use the repository update API or UI to redeploy existing Bedrock Knowledge Base repositories.

Key Features

LISA MCP

LISA MCP is a standalone infrastructure-as-code solution that allows administrators to deploy and host any Model Context Protocol (MCP) servers directly within LISA. This enterprise hosting platform provides turn-key infrastructure deployment, automatic scaling, and secure networking, allowing organizations to build and operate custom MCP tools without managing underlying infrastructure.

Enterprise Hosting Capabilities

  • Turn-key Deployment: Deploy STDIO, HTTP, or SSE MCP servers through a single API call or intuitive UI workflow, eliminating the need for manual infrastructure configuration
  • Dynamic Container Management: Bring your own pre-built container images or point to S3 artifacts that are automatically packaged into containers at deployment time
  • Automatic Scaling: Configure auto-scaling policies with customizable min/max capacity, CPU, and memory settings to handle varying workloads efficiently
  • Secure VPC Networking: All MCP servers run within your private VPC with Application and Network Load Balancers, ensuring traffic never leaves your secure network boundaries
  • API Gateway Integration: Hosted MCP servers are automatically exposed through LISA's existing API Gateway, inheriting the same authentication, authorization, and security controls (API keys, IDP lockdown, JWT group enforcement) used across the platform

Administrative Control

  • MCP Management UI: Complete lifecycle management through a dedicated admin interface where administrators create, update, start, stop, and delete hosted MCP servers
  • Group-Based Access Control: Restrict server visibility and usage to specific identity provider groups or make them available organization-wide
  • Lifecycle Automation: Step Functions orchestrate provisioning, health monitoring, failure handling, and connection publishing with full auditability through DynamoDB status records
  • Health Monitoring: Built-in health checks at both the container and load balancer levels ensure reliable service availability

Integration & Extensibility

  • External Integration Support: Hosted MCP servers can be accessed by external agents, copilots, RPA bots, or SaaS workloads using the same API Gateway endpoints and authentication mechanisms
  • mcp-proxy Support: STDIO servers are automatically wrapped with mcp-proxy and exposed over HTTP, simplifying deployment of standard MCP server implementations
  • UI & API Parity: Manage servers through either the MCP Management admin page or REST API endpoints (/mcp), providing flexibility for automation and programmatic workflows

LISA RAG Collections

LISA's RAG capabilities just got a major upgrade! We've completely reimagined how you organize and manage RAG documents with the introduction of Collections. Collections transform how you structure your RAG content. Think of repositories as filing cabinets and collections as the organized drawers within—each with its own configuration.

Flexible Document Organization

  • Custom Chunking Strategies: Configure different chunking approaches per collection (fixed-size or no chunking). If using a Bedrock Knowledge Base all service chunking strategies are supported
  • Flexible Embedding Models: Each collection can use its own embedding model, optimizing retrieval for specific document types
  • Access Control: Set collection-level permissions with group-based access control, making it easy to share some collections organization-wide while keeping others restricted within the same repository
  • Rich Metadata Support: Tag documents with custom metadata at the repository, collection, or document level for powerful filtering and organization

Intelligent Document Lifecycle Management

  • Smart Deletion Workflows: Delete collections asynchronously with optimized cleanup for each supported Repository
  • Document Preservation: User-managed documents in Bedrock Knowledge Bases are automatically preserved during collection operations, ensuring you never lose important content
  • Enhanced UI Experience: Browse, filter, and sort collections with visual status indicators, intuitive creation wizards, and document library integration with breadcrumb navigation
  • Admin-Controlled Operations: Collection creation, updates, and deletion are restricted to administrators while regular users can continue to view and upload documents to collections they have permission to access
  • Backward Compatibility: Existing repositories automatically get a virtual "Default" collection using the repository's embedding model with zero downtime and no database migrations required

Bedrock Knowledge Base Updates

  • Automatic Collection Creation: Each Bedrock Knowledge Base Data Source gets its own collection with LISA's management capabilities
  • Custom Metadata & Tagging: Add LISA's metadata to your Bedrock Knowledge Base documents for enhanced organization and filtering

Other Enhancements

  • Updated the prompt area to auto-expand from 2 rows to 20 rows when typing a large prompt.
  • Updates for easier prisma client generation
  • Enhanced logging in LISA Rest ECS cluster to include LiteLLM logs

Acknowledgements

Full Changelog: https://github.com/awslabs/LISA/compare/v5.4.0..v6.0.0

Summary (generated)

Version 6.0.0 Release Summary

Overview

Version 6.0.0 represents a major release introducing significant infrastructure enhancements, new features, and breaking changes to the LISA platform.

Major Features

1. LISA MCP (Model Context Protocol) Solution

  • New stand-alone MCP server management capabilities
  • TypeScript constructs for McpServerApi with DynamoDB, Lambda functions, and state machines
  • Admin-only functions for hosted MCP server management (create, list, get, delete, update)
  • Comprehensive state machine orchestration for MCP server lifecycle operations
  • VPC integration and IAM security configurations

2. RAG Collections Infrastructure

  • New CollectionRepository class with DynamoDB operations
  • Collection service module implementing CRUD operations with access control
  • Collection-based RAG configuration replacing repository type selection
  • Bedrock Knowledge Base integration with automated collection creation
  • Enhanced metadata management for document operations

3. CI/CD Pipeline Enhancements

  • GitHub Actions workflows for automated AI-powered code reviews using AWS Bedrock
  • Improved end-to-end testing capabilities with nightly test workflows
  • Enhanced pre-commit hook configurations with Python version specifications

Breaking Changes

⚠️ Required Migration Steps

  1. API Token Table Migration

    • Management key secret has been relocated
    • Token table structure requires updates
  2. Management Key Secret Relocation

    • Management key is now created with rotation capabilities
    • Update secret references in your deployment
  3. Bedrock Knowledge Base Repository Redeployment

    • Repositories must be redeployed to support new collection infrastructure
    • New fields include metadata support and collection IDs
  4. RAG Configuration Updates

    • RAG options now use collection IDs instead of repository types
    • Update existing RAG configurations accordingly

Infrastructure Improvements

Centralized Configuration Management

  • New constants module reduces magic strings throughout codebase
  • Improved code maintainability and consistency
  • CustomAuthorizer refactored to accept managementKeySecretName as parameter

API Enhancements

  • API URL configuration supports custom domain names via apiGatewayConfig.domainName
  • Expanded Repository API endpoints for collection and Bedrock Knowledge Base management
  • Lambda function aliases created with 'live' naming convention

Authentication Refactoring

  • Consolidated get_user_context() function for centralized user information retrieval
  • New user_has_group_access() function for group-based access control
  • Improved error handling with new exception classes

Backend Enhancements

Repository Management

  • New collection repository with comprehensive CRUD operations
  • Enhanced document ingestion with metadata generation
  • Improved deletion workflows with cascade operations
  • Batch document processing capabilities
  • Repository service factory pattern implementation

Utility Modules

  • New Bedrock Knowledge Base utilities for document discovery and ingestion
  • Chunking strategy factory with support for fixed-size and no-chunking strategies
  • Enhanced validation utilities for KB operations
  • Improved error message handling with ValidationError support

User Interface Updates

Navigation Enhancements

  • Admin menu expanded with "RAG Management" and "MCP Management" options
  • New CollectionLibraryComponent for collection management
  • Role-based admin controls with default collection protection

RAG Configuration

  • Unified chunking strategy configuration
  • Collection-based selection with filtering for active collections
  • Dynamic prompt area expansion based on viewport height

Configuration Updates

Schema Enhancements

  • New collectionSchema.ts defining RAG collection configuration
  • New role and deployment options including McpServerDeployerRole
  • Enhanced RAG schema with chunking strategies and vector store status enums
  • Support for precompiled MCP server deployer

Environment Configuration

  • Excluded .kiro/ and .amazonq/ directories from version control
  • Test coverage threshold adjusted from 85% to 83%
  • Dependency version bumps and linting rule adjustments

Documentation

  • Comprehensive CHANGELOG.md documenting all changes
  • Updated README.md with new features and migration guidance
  • Enhanced inline code documentation throughout

Note: Please review the breaking changes section carefully and follow the required migration steps before upgrading to version 6.0.0.

estohlmann and others added 25 commits November 7, 2025 19:33
* Feature/rag backend (#521)
* Add collection rag schema
* Add collection repo
* Add collection service
* Add collections CRUD API
* Add Collections Table
* Update document ingestion using collections
* Update delete docs from collections
* Add sdk and collection tests
* Add RAG Collection API and Tests
* rag collection UI
* default collection deletion
Co-authored-by: jmharold <jmharold@amazon.com>
Extend collections to Bedrock Knowledge Base. Supports creating single collection per repository based on supplied datasource. Adds Ingestion rules for event-based triggers. Filters RAG results by selected collection. Adds no chunk ingestion strategy.
…cific suffix to avoid naming conflicts. The suffix is derived from the stack name, ensuring compliance with AWS character limits.
…capsulate the deployment process in a try-except block. This change ensures that any exceptions during the deployment are logged with event details for better debugging.
@github-actions
Copy link
Copy Markdown
Author

github-actions Bot commented Nov 26, 2025

Version 6.0.0 Release Summary

Overview

Version 6.0.0 represents a major release introducing significant infrastructure enhancements, new features, and breaking changes to the LISA platform.

Major Features

1. LISA MCP (Model Context Protocol) Solution

  • New stand-alone MCP server management capabilities
  • TypeScript constructs for McpServerApi with DynamoDB, Lambda functions, and state machines
  • Admin-only functions for hosted MCP server management (create, list, get, delete, update)
  • Comprehensive state machine orchestration for MCP server lifecycle operations
  • VPC integration and IAM security configurations

2. RAG Collections Infrastructure

  • New CollectionRepository class with DynamoDB operations
  • Collection service module implementing CRUD operations with access control
  • Collection-based RAG configuration replacing repository type selection
  • Bedrock Knowledge Base integration with automated collection creation
  • Enhanced metadata management for document operations

3. CI/CD Pipeline Enhancements

  • GitHub Actions workflows for automated AI-powered code reviews using AWS Bedrock
  • Improved end-to-end testing capabilities with nightly test workflows
  • Enhanced pre-commit hook configurations with Python version specifications

Breaking Changes

⚠️ Required Migration Steps

  1. API Token Table Migration

    • Management key secret has been relocated
    • Token table structure requires updates
  2. Management Key Secret Relocation

    • Management key is now created with rotation capabilities
    • Update secret references in your deployment
  3. Bedrock Knowledge Base Repository Redeployment

    • Repositories must be redeployed to support new collection infrastructure
    • New fields include metadata support and collection IDs
  4. RAG Configuration Updates

    • RAG options now use collection IDs instead of repository types
    • Update existing RAG configurations accordingly

Infrastructure Improvements

Centralized Configuration Management

  • New constants module reduces magic strings throughout codebase
  • Improved code maintainability and consistency
  • CustomAuthorizer refactored to accept managementKeySecretName as parameter

API Enhancements

  • API URL configuration supports custom domain names via apiGatewayConfig.domainName
  • Expanded Repository API endpoints for collection and Bedrock Knowledge Base management
  • Lambda function aliases created with 'live' naming convention

Authentication Refactoring

  • Consolidated get_user_context() function for centralized user information retrieval
  • New user_has_group_access() function for group-based access control
  • Improved error handling with new exception classes

Backend Enhancements

Repository Management

  • New collection repository with comprehensive CRUD operations
  • Enhanced document ingestion with metadata generation
  • Improved deletion workflows with cascade operations
  • Batch document processing capabilities
  • Repository service factory pattern implementation

Utility Modules

  • New Bedrock Knowledge Base utilities for document discovery and ingestion
  • Chunking strategy factory with support for fixed-size and no-chunking strategies
  • Enhanced validation utilities for KB operations
  • Improved error message handling with ValidationError support

User Interface Updates

Navigation Enhancements

  • Admin menu expanded with "RAG Management" and "MCP Management" options
  • New CollectionLibraryComponent for collection management
  • Role-based admin controls with default collection protection

RAG Configuration

  • Unified chunking strategy configuration
  • Collection-based selection with filtering for active collections
  • Dynamic prompt area expansion based on viewport height

Configuration Updates

Schema Enhancements

  • New collectionSchema.ts defining RAG collection configuration
  • New role and deployment options including McpServerDeployerRole
  • Enhanced RAG schema with chunking strategies and vector store status enums
  • Support for precompiled MCP server deployer

Environment Configuration

  • Excluded .kiro/ and .amazonq/ directories from version control
  • Test coverage threshold adjusted from 85% to 83%
  • Dependency version bumps and linting rule adjustments

Documentation

  • Comprehensive CHANGELOG.md documenting all changes
  • Updated README.md with new features and migration guidance
  • Enhanced inline code documentation throughout

Note: Please review the breaking changes section carefully and follow the required migration steps before upgrading to version 6.0.0.

Comment on lines +32 to +33
with:
ref: develop
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ref: develop parameter has been added to the checkout action. This change hardcodes the workflow to always check out the develop branch instead of the current branch being tested. For a nightly end-to-end test workflow, this may cause the workflow to test the wrong branch. Consider whether this should reference the branch that triggered the workflow or if this is intentional for nightly runs. If the intent is to always test the develop branch, this should be documented clearly.

role-session-name: GitHub_to_AWS_via_FederatedOIDC
role-duration-seconds: 7200
- name: PR Review
uses: tmokmss/bedrock-pr-reviewer@v1
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The action tmokmss/bedrock-pr-reviewer@v1 is a third-party action from an external maintainer. Consider verifying that this action is actively maintained, trustworthy, and compatible with your security and compliance requirements. Alternatively, consider implementing a custom GitHub Action or using an officially supported AWS service for code reviews.


jobs:
review:
environment: dev
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The job is configured to run in the dev environment. Ensure this environment has the appropriate protection rules and approval requirements for production-grade code review workflows. Consider whether this should run in a more restricted environment or if additional safeguards are needed.

*/
import { Construct } from 'constructs';
import { BaseProps } from '../../../schema';
import { BaseProps, VectorStoreStatus, } from '../../../schema';
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import statement has a trailing comma after VectorStoreStatus which may cause linting issues. Ensure this follows your project's linting rules.

Suggested change
import { BaseProps, VectorStoreStatus, } from '../../../schema';
import { BaseProps, VectorStoreStatus } from '../../../schema';

super(scope, id);

const { config, executionRole, parameterName, role, vectorStoreConfigTable, vectorStoreDeployerFnArn } = props;
const { config, createBedrockCollectionFnArn, executionRole, parameterName, role, vectorStoreConfigTable, vectorStoreDeployerFnArn } = props;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The destructuring now includes createBedrockCollectionFnArn which is used to create a Lambda function reference. Ensure this ARN is properly validated before being passed to lambda.Function.fromFunctionArn() to prevent runtime errors with invalid ARNs.

item: {
repositoryId: tasks.DynamoAttributeValue.fromString(sfn.JsonPath.stringAt('$.body.ragConfig.repositoryId')),
status: tasks.DynamoAttributeValue.fromString('CREATE_IN_PROGRESS'),
status: tasks.DynamoAttributeValue.fromString(VectorStoreStatus.CREATE_IN_PROGRESS),
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The status is now using the VectorStoreStatus.CREATE_IN_PROGRESS enum constant instead of the hardcoded string 'CREATE_IN_PROGRESS'. This is a good improvement for maintainability. However, verify that VectorStoreStatus enum is properly exported and contains all the status values used throughout this file (e.g., CREATE_IN_PROGRESS, CREATE_COMPLETE, CREATE_FAILED, UPDATE_IN_PROGRESS, UPDATE_COMPLETE, UPDATE_COMPLETE_CLEANUP_IN_PROGRESS).


// Task to check the deployment status using a Lambda function
const checkDeploymentStatus = new tasks.CallAwsService(this, 'DescribeStack', {
const checkDeploymentStatus = new tasks.CallAwsService(this, 'CheckDeploymentStatus', {
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The task ID was changed from 'DescribeStack' to 'CheckDeploymentStatus'. Ensure this change doesn't conflict with any other state machine state IDs and that the new name accurately reflects the task's purpose.

Comment on lines +96 to 103
// Task to create default collection for Bedrock KB
const createDefaultCollectionTask = new tasks.LambdaInvoke(this, 'CreateDefaultCollection', {
lambdaFunction: createBedrockCollectionFn,
payload: sfn.TaskInput.fromObject({
ragConfig: sfn.JsonPath.objectAt('$.body.ragConfig'),
}),
resultPath: '$.collectionResult',
});
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A new task createDefaultCollectionTask has been introduced to create default collections for Bedrock KB. Verify that the createBedrockCollectionFn Lambda function is properly configured to handle the ragConfig payload and that error handling is appropriate for this new task.

Comment on lines 107 to 116
const updateSuccessStatus = new tasks.DynamoUpdateItem(this, 'UpdateSuccessStatus', {
table: vectorStoreConfigTable,
key: { repositoryId: tasks.DynamoAttributeValue.fromString(sfn.JsonPath.stringAt('$.body.ragConfig.repositoryId')) },
updateExpression: 'SET #status = :status, #stackName = :stackName',
expressionAttributeNames: { '#status': 'status', '#stackName': 'stackName' },
expressionAttributeValues: {
':status': tasks.DynamoAttributeValue.fromString('CREATE_COMPLETE'),
':stackName': tasks.DynamoAttributeValue.fromString(sfn.JsonPath.stringAt('$.deployResult.stackName') ?? '')
':status': tasks.DynamoAttributeValue.fromString(VectorStoreStatus.CREATE_COMPLETE),
':stackName': tasks.DynamoAttributeValue.fromString(sfn.JsonPath.stringAt('$.deployResult.stackName'))
},
});
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The updateSuccessStatus task now includes stackName in the update expression. The comment indicates that for Bedrock KB without pipelines, stackName may be null. Verify that DynamoDB can handle null values for the stackName attribute or if a default value should be provided instead of sfn.JsonPath.stringAt('$.deployResult.stackName').

Comment on lines 119 to 127
const updateFailureStatus = new tasks.DynamoUpdateItem(this, 'UpdateFailureStatus', {
table: vectorStoreConfigTable,
key: { repositoryId: tasks.DynamoAttributeValue.fromString(sfn.JsonPath.stringAt('$.body.ragConfig.repositoryId')) },
updateExpression: 'SET #status = :status, #stackName = :stackName',
expressionAttributeNames: { '#status': 'status', '#stackName': 'stackName' },
updateExpression: 'SET #status = :status',
expressionAttributeNames: { '#status': 'status' },
expressionAttributeValues: {
':status': tasks.DynamoAttributeValue.fromString('CREATE_FAILED'),
':stackName': tasks.DynamoAttributeValue.fromString(sfn.JsonPath.stringAt('$.deployResult.stackName'))
':status': tasks.DynamoAttributeValue.fromString(VectorStoreStatus.CREATE_FAILED)
},
});
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The updateFailureStatus task has been simplified compared to the old version. The old version set both status and stackName, but the new version only sets status. Verify this is intentional and that not updating stackName on failure won't cause issues with downstream processes or monitoring.

Comment on lines +129 to +141
// Check if this is a Bedrock KB repository to create default collections
const skipCollectionCreation = new sfn.Pass(this, 'SkipCollectionCreation');

const checkIfBedrockKB = new sfn.Choice(this, 'IsBedrockKB?')
.when(
sfn.Condition.stringEquals('$.body.ragConfig.type', 'bedrock_knowledge_base'),
createDefaultCollectionTask
)
.otherwise(skipCollectionCreation);

// Both paths converge to update success status
createDefaultCollectionTask.next(updateSuccessStatus);
skipCollectionCreation.next(updateSuccessStatus);
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A new conditional flow has been introduced to check if the repository is a Bedrock KB and conditionally create default collections. Verify that the condition '$.body.ragConfig.type' === 'bedrock_knowledge_base' correctly identifies Bedrock KB repositories and that the skipCollectionCreation pass state properly handles non-Bedrock KB types.

Comment on lines +149 to +151
sfn.Condition.stringEquals('$.deployResult.status', VectorStoreStatus.CREATE_IN_PROGRESS),
sfn.Condition.stringEquals('$.deployResult.status', VectorStoreStatus.UPDATE_IN_PROGRESS),
sfn.Condition.stringEquals('$.deployResult.status', VectorStoreStatus.UPDATE_COMPLETE_CLEANUP_IN_PROGRESS),
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The status comparisons now use VectorStoreStatus enum constants instead of hardcoded strings. Ensure all enum values referenced here (CREATE_IN_PROGRESS, UPDATE_IN_PROGRESS, UPDATE_COMPLETE_CLEANUP_IN_PROGRESS) are defined in the VectorStoreStatus enum.

Comment on lines +160 to +161
sfn.Condition.stringEquals('$.deployResult.status', VectorStoreStatus.CREATE_COMPLETE),
sfn.Condition.stringEquals('$.deployResult.status', VectorStoreStatus.UPDATE_COMPLETE),
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The status comparisons now use VectorStoreStatus enum constants instead of hardcoded strings. Ensure all enum values referenced here (CREATE_COMPLETE, UPDATE_COMPLETE) are defined in the VectorStoreStatus enum.

Copy link
Copy Markdown
Author

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commits Files that changed from the base of the PR and between f940742 and e22608f commits.
Files selected (1)
  • lambda/utilities/common_functions.py (5)
Review comments generated (3)
  • Review: 3
  • LGTM: 0

Tips

Chat with AI reviewer (/reviewbot)

  • Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
  • Invite the bot into a review comment chain by tagging /reviewbot in a reply.

Code suggestions

  • The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
  • You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.

Pausing incremental reviews

  • Add /reviewbot: ignore anywhere in the PR description to pause further reviews from the bot.

Comment on lines +23 to +26
from datetime import datetime
from decimal import Decimal
from functools import cache
from typing import Any, Callable, cast, Dict, List, Optional, TypeVar, Union
from typing import Any, Callable, cast, Dict, Optional, TypeVar, Union
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The import statement has inconsistent indentation. Line 24 has leading whitespace that should be removed to align with the other imports.

Suggested change
from datetime import datetime
from decimal import Decimal
from functools import cache
from typing import Any, Callable, cast, Dict, List, Optional, TypeVar, Union
from typing import Any, Callable, cast, Dict, Optional, TypeVar, Union
from datetime import datetime
from decimal import Decimal
from functools import cache
from typing import Any, Callable, cast, Dict, Optional, TypeVar, Union

Comment on lines +267 to +294
# Check for ValidationError from utilities.validation
status_code = 400
if hasattr(e, "response"): # i.e. validate the exception was from an API call
error_message: str
if type(e).__name__ == "ValidationError":
error_message = str(e)
logger.exception(e)
elif hasattr(e, "response"): # i.e. validate the exception was from an API call
metadata = e.response.get("ResponseMetadata")
if metadata:
status_code = metadata.get("HTTPStatusCode", 400)
error_message = str(e)
logger.exception(e)
elif hasattr(e, "http_status_code"):
status_code = e.http_status_code
e = e.message # type: ignore [assignment]
error_message = getattr(e, "message", str(e))
logger.exception(e)
elif hasattr(e, "status_code"):
status_code = e.status_code
e = e.message # type: ignore [assignment]
error_message = getattr(e, "message", str(e))
logger.exception(e)
else:
error_msg = str(e)
if error_msg in ["'requestContext'", "'pathParameters'", "'body'"]:
e = f"Missing event parameter: {error_msg}" # type: ignore [assignment]
error_message = f"Missing event parameter: {error_msg}"
else:
e = f"Bad Request: {error_msg}" # type: ignore [assignment]
error_message = f"Bad Request: {error_msg}"
logger.exception(e)
return generate_html_response(status_code, e) # type: ignore [arg-type]
return generate_html_response(status_code, error_message) # type: ignore [arg-type]
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error handling logic has inconsistent indentation throughout this block. Multiple lines have incorrect leading whitespace (lines 268, 274, 275, 278, 279, 282, 283, 286, 287, 288). Additionally, the variable naming has changed from reassigning e to using error_message, which is good, but the indentation must be corrected for the code to be valid Python.

Suggested change
# Check for ValidationError from utilities.validation
status_code = 400
if hasattr(e, "response"): # i.e. validate the exception was from an API call
error_message: str
if type(e).__name__ == "ValidationError":
error_message = str(e)
logger.exception(e)
elif hasattr(e, "response"): # i.e. validate the exception was from an API call
metadata = e.response.get("ResponseMetadata")
if metadata:
status_code = metadata.get("HTTPStatusCode", 400)
error_message = str(e)
logger.exception(e)
elif hasattr(e, "http_status_code"):
status_code = e.http_status_code
e = e.message # type: ignore [assignment]
error_message = getattr(e, "message", str(e))
logger.exception(e)
elif hasattr(e, "status_code"):
status_code = e.status_code
e = e.message # type: ignore [assignment]
error_message = getattr(e, "message", str(e))
logger.exception(e)
else:
error_msg = str(e)
if error_msg in ["'requestContext'", "'pathParameters'", "'body'"]:
e = f"Missing event parameter: {error_msg}" # type: ignore [assignment]
error_message = f"Missing event parameter: {error_msg}"
else:
e = f"Bad Request: {error_msg}" # type: ignore [assignment]
error_message = f"Bad Request: {error_msg}"
logger.exception(e)
return generate_html_response(status_code, e) # type: ignore [arg-type]
return generate_html_response(status_code, error_message) # type: ignore [arg-type]
# Check for ValidationError from utilities.validation
status_code = 400
error_message: str
if type(e).__name__ == "ValidationError":
error_message = str(e)
logger.exception(e)
elif hasattr(e, "response"): # i.e. validate the exception was from an API call
metadata = e.response.get("ResponseMetadata")
if metadata:
status_code = metadata.get("HTTPStatusCode", 400)
error_message = str(e)
logger.exception(e)
elif hasattr(e, "http_status_code"):
status_code = e.http_status_code
error_message = getattr(e, "message", str(e))
logger.exception(e)
elif hasattr(e, "status_code"):
status_code = e.status_code
error_message = getattr(e, "message", str(e))
logger.exception(e)
else:
error_msg = str(e)
if error_msg in ["'requestContext'", "'pathParameters'", "'body'"]:
error_message = f"Missing event parameter: {error_msg}"
else:
error_message = f"Bad Request: {error_msg}"
logger.exception(e)
return generate_html_response(status_code, error_message) # type: ignore [arg-type]

Comment on lines 372 to 383
return f"{lisa_api_endpoint}/{os.environ['REST_API_VERSION']}/serve"


def get_username(event: dict) -> str:
"""Get the username from the event."""
username: str = event.get("requestContext", {}).get("authorizer", {}).get("username", "system")
return username


def get_session_id(event: dict) -> str:
"""Get the session ID from the event."""
session_id: str = event.get("pathParameters", {}).get("sessionId")
return session_id


def get_groups(event: Any) -> List[str]:
"""Get user groups from event."""
groups: List[str] = json.loads(event.get("requestContext", {}).get("authorizer", {}).get("groups", "[]"))
return groups


def get_principal_id(event: Any) -> str:
"""Get principal from event."""
principal: str = event.get("requestContext", {}).get("authorizer", {}).get("principal", "")
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The removal of get_username() and get_groups() functions suggests a refactoring toward a consolidated get_user_context() function as mentioned in the PR description. However, this is a breaking change for any code that directly calls these removed functions. Verify that all internal callers have been updated to use the new consolidated function, or consider deprecating these functions gradually rather than removing them outright.


Customers can set up multiple ingestion pipelines for a repository. For each pipeline they define:
- The target repository and collection
- Embedding model (inherited from repository if not defined)
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The statement 'Embedding model (inherited from repository if not defined)' is ambiguous. Clarify whether the embedding model is always inherited from the repository for pipelines, or if pipelines can specify their own embedding model independent of the repository setting.

Comment on lines +86 to +88
- **Chunking Strategy**: Optimized for the content type (fixed size or none)
- **Embedding Model**: Inherited from repository or customized per collection
- **Access Control**: User group restrictions inherited from the repository or customized per collection
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The documentation states that Embedding Model is 'Inherited from repository or customized per collection' and Access Control is 'inherited from the repository or customized per collection', but line 224 in the response example shows embeddingModel is inherited from parent repository without customization option. Clarify whether collections can truly customize their embedding model or if it's always inherited.

- **Default Strategy**: Inherited from the repository configuration
- **Collection Strategy**: Override at the collection level for content-specific optimization
- **Pipeline Strategy**: Further override at the ingestion pipeline level
- **API Override**: Optionally allow per-document chunking strategy via API (controlled by `allowChunkingOverride` flag)
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The allowChunkingOverride flag is mentioned here as controlling per-document chunking strategy via API, but this flag is not documented in the Collection creation request example (line 202). Clarify the scope and usage of this flag in the API documentation.

- **Repository-level Groups**: Collections inherit allowed groups from their parent repository by default
- **Collection-level Groups**: Collections can override with their own group restrictions for finer control
- **Admin Access**: Administrators have full access to all collections across all repositories
- **User Collection Creation**: Repositories can be configured to allow or restrict user-created collections via the `allowUserCollections` flag
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The allowUserCollections flag is introduced here for the first time in the permissions section, but it was already mentioned in the repository creation example (line 160). Consider moving this explanation earlier in the document when repositories are first introduced, or consolidate the repository configuration details.

Copy link
Copy Markdown
Author

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commits Files that changed from the base of the PR and between 8801c99 and 9837b5d commits.
Files selected (6)
  • CHANGELOG.md (2)
  • README.md (1)
  • lib/docs/admin/architecture.md (2)
  • lib/docs/config/mcp.md (1)
  • lib/docs/user/breaking-changes.md (1)
  • lib/user-interface/react/src/components/configuration/ActivatedUserComponents.tsx (3)
Files ignored due to filter (4)
  • lib/docs/assets/LisaArchitecture.png
  • lib/docs/assets/LisaChat.png
  • lib/docs/assets/LisaMcp.png
  • lib/docs/assets/LisaServe.png
Files skipped from review due to trivial changes (3)
  • CHANGELOG.md
  • lib/docs/config/mcp.md
  • lib/user-interface/react/src/components/configuration/ActivatedUserComponents.tsx
Review comments generated (12)
  • Review: 12
  • LGTM: 0

Tips

Chat with AI reviewer (/reviewbot)

  • Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
  • Invite the bot into a review comment chain by tagging /reviewbot in a reply.

Code suggestions

  • The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
  • You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.

Pausing incremental reviews

  • Add /reviewbot: ignore anywhere in the PR description to pause further reviews from the bot.

Comment thread README.md
@@ -1,14 +1,27 @@
# LLM Inference Solution for Amazon Dedicated Cloud (LISA)
[![Full Documentation](https://img.shields.io/badge/Full%20Documentation-blue?style=for-the-badge&logo=Vite&logoColor=white)](https://awslabs.github.io/LISA/)
[![Contact Us](https://img.shields.io/badge/Contact%20Us-green?style=for-the-badge&logo=maildotru&logoColor=white)](mailto:lisa-product-team@amazon.com)
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 'Contact Us' link has been added, which is good for user engagement. However, verify that the email address lisa-product-team@amazon.com is actively monitored and appropriate for production documentation.

Comment thread README.md
[![Contact Us](https://img.shields.io/badge/Contact%20Us-green?style=for-the-badge&logo=maildotru&logoColor=white)](mailto:lisa-product-team@amazon.com)
## What is LISA?
Our large language model (LLM) inference solution for the Amazon Dedicated Cloud (ADC), LISA, is an open source infrastructure-as-code solution. Customers deploy LISA directly into an Amazon Web Services (AWS) account. While specially designed for ADC regions that support government customers' most sensitive workloads, LISA is also compatible with commercial regions. LISA supports model self-hosting via Amazon Elastic Container Service (ECS). LISA's LiteLLM support also makes it compatible with 100+ models hosted by external model providers, including Amazon Bedrock. LISA further complements Amazon Bedrock by accelerating GenAI adoption. LISA's optional chat assistant user interface (UI) supports model management, model prompting, document summarization, chat session management, prompt libraries, retrieval augmented generation (RAG), automated document ingestion pipelines, and other advanced features. Customers can choose to integrate custom UIs directly with LISA, relying on LISA for centralized model orchestration, chat session management, and RAG. LISA is scalable and ready to support production use cases. The roadmap is customer-driven, with new capabilities launching monthly.
Our large language model (LLM) inference solution for the Amazon Dedicated Cloud (ADC), LISA, is open source infrastructure-as-code. Customers deploy it directly into an Amazon Web Services (AWS) account in any region. LISA is scalable and ready to support production use cases.
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description has been simplified from 'an open source infrastructure-as-code solution' to 'open source infrastructure-as-code', but the removal of context about ADC regions and government customers may lose important positioning information. Consider whether this simplification aligns with the product's target audience and marketing strategy.

Comment thread README.md
Our large language model (LLM) inference solution for the Amazon Dedicated Cloud (ADC), LISA, is an open source infrastructure-as-code solution. Customers deploy LISA directly into an Amazon Web Services (AWS) account. While specially designed for ADC regions that support government customers' most sensitive workloads, LISA is also compatible with commercial regions. LISA supports model self-hosting via Amazon Elastic Container Service (ECS). LISA's LiteLLM support also makes it compatible with 100+ models hosted by external model providers, including Amazon Bedrock. LISA further complements Amazon Bedrock by accelerating GenAI adoption. LISA's optional chat assistant user interface (UI) supports model management, model prompting, document summarization, chat session management, prompt libraries, retrieval augmented generation (RAG), automated document ingestion pipelines, and other advanced features. Customers can choose to integrate custom UIs directly with LISA, relying on LISA for centralized model orchestration, chat session management, and RAG. LISA is scalable and ready to support production use cases. The roadmap is customer-driven, with new capabilities launching monthly.
Our large language model (LLM) inference solution for the Amazon Dedicated Cloud (ADC), LISA, is open source infrastructure-as-code. Customers deploy it directly into an Amazon Web Services (AWS) account in any region. LISA is scalable and ready to support production use cases.

LISA accelerates GenAI adoption by offering built-in configurability with Amazon Bedrock models, Knowledge Bases, and Guardrails. Also by offering advanced capabilities like an optional enterprise-ready chat user interface (UI) with configurable features, authentication, resource access control, centralized model orchestration via LiteLLM, model self-hosting via Amazon ECS, retrieval augmented generation (RAG), APIs, and broad model context protocol (MCP) support and features. LISA is also compatible with OpenAI’s API specification making it easily configurable with supporting solutions. For example, the Continue plugin for VSCode and JetBrains integrated development environments (IDE).
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new description is more concise but removes specific details about ECS, Bedrock integration, and use cases (document summarization, prompt libraries, etc.) that were in the original. Ensure this level of abstraction is intentional and doesn't obscure key capabilities from new users.

Comment thread README.md
* **FedRAMP**: Leverages FedRAMP High compliant services.

## Major Components
LISA’s four major components include Serve, a Chat UI, RAG, and MCP. LISA Serve and LISA MCP are standalone, foundational core solutions with APIs for customers not leveraging LISA’s Chat UI. Both LISA’s Chat UI and RAG are optional components, but must be used with Serve.
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The statement 'LISA Serve and LISA MCP are standalone, foundational core solutions' introduces LISA MCP as a major component, which aligns with the v6.0.0 release. However, clarify whether LISA MCP requires Serve as a dependency or if it is truly independent, as the current wording could be ambiguous.

tooling or alternative front ends. LISA uses Amazon DynamoDB to store Tokens to interact with the exposed APIs.
* Inference requests through LiteLLM support prompting LLMs configured with LISA. Prompts can support LISA’s RAG and
MCP and features.
LISA’s four major components include Serve, a Chat user interface (UI), retrieval augmented generation (RAG), and model context protocol (MCP).
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The statement "LISA's four major components" should be verified against the actual component count. The list shows: Serve, Chat UI, RAG, and MCP. However, the description later treats APIs as a separate section. Clarify whether APIs are a component or a feature of Serve/MCP.

**LISA’s chat UI features include:**
* RAG operations are managed through `lambda/rag/lambda_functions.py`, which handles embedding generation and document retrieval via OpenSearch and PostgreSQL.
* Direct requests to the LISA Serve ALB entrypoint must utilize the OpenAI API spec, which we support through the use of the LiteLLM proxy.
* LISA supports OpenAI's API spec, which means LISA can be easily configured with the Continue plugin for use with Jetbrains or VS Code integrated development environments (IDE).
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The text references "Continue plugin for use with Jetbrains or VS Code integrated development environments (IDE)" but this appears to be a Chat UI feature, not a Serve-specific feature. Consider moving this to the Chat UI section or clarifying the context.

## LISA MCP
![LISA MCP Architecture](../assets/LisaMcp.png)

LISA MCP is a standalone product that provides scalable infrastructure for deploying and hosting Model Context Protocol (MCP) servers. It allows customers to self-host MCP servers for enterprise use. LISA MCP can be deployed independently of LISA Serve or configured to work seamlessly with LISA Serve and the Chat UI.
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description states LISA MCP "can be deployed independently of LISA Serve or configured to work seamlessly with LISA Serve and the Chat UI." However, line 5 states "Both LISA's Chat UI and RAG are optional components, but must be used with Serve." Clarify whether MCP has different deployment requirements than Chat UI and RAG.

* MCP Server Lifecycle: Lifecycle operations such as create, update, delete, start, and stop are orchestrated by Step Functions workflows (`CreateMcpServer`, `UpdateMcpServer`, `DeleteMcpServer`). The MCP API Handler Lambda validates requests and manages server metadata in DynamoDB.
* CloudFormation: Infrastructure components are provisioned using CloudFormation templates synthesized by the MCP server deployer Lambda, as defined in `mcp_server_deployer/src/lib/ecsMcpServer.ts`.
* ECS Fargate: Each MCP server runs in its own ECS Fargate cluster with dedicated ALB and NLB. The Fargate cluster configuration is located in `mcp_server_deployer/src/lib/ecsFargateCluster.ts`.
* Authentication: API Gateway enforces the same Lambda authorizer used across LISA (JWT validation + optional API key checks). The `{LISA_BEARER_TOKEN}` placeholder in connection details is automatically replaced with the user's bearer token at connection time.
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The technical note mentions {LISA_BEARER_TOKEN} placeholder replacement at connection time. Verify this mechanism is documented in the API authentication section and that this behavior is consistent with other LISA components.


* Prompting text and image generation LLMs and receiving responses
* Viewing, deleting, and exporting chat history
* Supports streaming responses, viewing metadata, RAG citations
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The feature list now includes "RAG citations" which is new. Verify this feature is actually implemented in v6.0.0 and documented in the RAG Collections section, as it's not mentioned in the PR description.

* RAG document library
* Uploading docs into non-RAG in context
* Non-RAG in context Document summarization feature
* Model Context Protocol (MCP) support for LISA MCP, along with MCP Workbench, and third party MCP Connections features
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The text mentions "MCP Workbench, and third party MCP Connections features" but these are not described in the LISA MCP section above. Either add descriptions of these features or clarify their scope in the MCP section.

@estohlmann estohlmann merged commit 88c4d74 into main Nov 26, 2025
17 checks passed
@estohlmann estohlmann deleted the release/v6.0.0 branch November 26, 2025 21:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants