Skip to content

Commit 0c69192

Browse files
authored
Release v6.5.0 into Main
2 parents eeb3e58 + 52ae206 commit 0c69192

File tree

321 files changed

+22795
-10793
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

321 files changed

+22795
-10793
lines changed

.devcontainer/post_create_command.sh

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,21 @@
33
pwd
44

55
sudo apt-get update -y
6-
sudo apt-get install -y jq yq
6+
sudo apt-get install -y jq
77

8-
make createPythonEnvironment
8+
python3 -m venv .venv
99
. .venv/bin/activate
1010
echo "source .venv/bin/activate" >> ~/.bashrc
1111
echo "source .venv/bin/activate" >> ~/.zshrc
1212

13-
echo "alias deploylisa='make clean && npm ci && make deploy HEADLESS=true'" >> ~/.bashrc
14-
echo "alias deploylisa='make clean && npm ci && make deploy HEADLESS=true'" >> ~/.zshrc
13+
echo "alias deploylisa='npm run clean && npm ci && HEADLESS=true npm run deploy'" >> ~/.bashrc
14+
echo "alias deploylisa='npm run clean && npm ci && HEADLESS=true npm run deploy'" >> ~/.zshrc
1515

1616
python -m pip install --upgrade pip
17-
pip3 install yq huggingface_hub s5cmd
18-
make installPythonRequirements
17+
pip3 install huggingface_hub s5cmd
18+
npm run install:python
1919

20-
make createTypeScriptEnvironment
21-
make installTypeScriptRequirements
20+
npm install
2221

2322
git config --unset-all core.hooksPath
2423
pre-commit install

.github/workflows/code.deploy.demo.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,18 @@ jobs:
4040
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v4
4141
with:
4242
node-version: 24.x
43-
- name: Install CDK dependencies
43+
- name: Install dependencies
4444
run: |
4545
npm ci
46+
pip install -r requirements-dev.txt
47+
pip install -e ./lisa-sdk
48+
pip install -e lib/serve/mcp-workbench
4649
- name: Deploy LISA
4750
run: |
48-
make deploy HEADLESS=true
51+
npm run deploy
52+
env:
53+
HEADLESS: "true"
54+
SKIP_INSTALL: "true"
4955
SendSlackNotification:
5056
name: Send Slack Notification
5157
needs: [ DeployLISA ]

.github/workflows/code.deploy.dev.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,18 @@ jobs:
4040
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v4
4141
with:
4242
node-version: 24.x
43-
- name: Install CDK dependencies
43+
- name: Install dependencies
4444
run: |
4545
npm ci
46+
pip install -r requirements-dev.txt
47+
pip install -e ./lisa-sdk
48+
pip install -e lib/serve/mcp-workbench
4649
- name: Deploy LISA
4750
run: |
48-
make deploy HEADLESS=true
51+
npm run deploy
52+
env:
53+
HEADLESS: "true"
54+
SKIP_INSTALL: "true"
4955
SendSlackNotification:
5056
name: Send Slack Notification
5157
needs: [ DeployLISA ]
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: Weekly Full E2E Tests
2+
3+
on:
4+
schedule:
5+
- cron: '0 2 * * 0' # Every Sunday at 02:00 UTC
6+
workflow_dispatch:
7+
inputs:
8+
ref:
9+
description: 'Branch or tag to test against'
10+
required: false
11+
default: 'develop'
12+
type: string
13+
workflow_call:
14+
inputs:
15+
ref:
16+
description: 'Branch or tag to test against'
17+
required: false
18+
default: 'develop'
19+
type: string
20+
21+
permissions:
22+
contents: read
23+
24+
env:
25+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
26+
27+
jobs:
28+
notify_full_e2e_start:
29+
name: Starting Full E2E Tests
30+
runs-on: ubuntu-latest
31+
steps:
32+
- name: Send "Full E2E Tests Starting" to Slack
33+
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2
34+
env:
35+
SLACK_TITLE: 'Full E2E Tests Starting'
36+
MSG_MINIMAL: true
37+
SLACK_MESSAGE: 'Full E2E test suite has started on ref `${{ inputs.ref || github.ref_name }}`...'
38+
39+
full-e2e:
40+
name: Run Full E2E Tests
41+
runs-on: ubuntu-latest
42+
timeout-minutes: 60
43+
steps:
44+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
45+
with:
46+
ref: ${{ inputs.ref || 'develop' }}
47+
- name: Setup Node.js
48+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v4
49+
with:
50+
node-version: '24'
51+
cache: 'npm'
52+
- name: Install base dependencies
53+
run: npm ci
54+
- name: Run Cypress Full E2E Suite
55+
env:
56+
ADMIN_USER_NAME: ${{ secrets.ADMIN_USER_NAME }}
57+
ADMIN_PASSWORD: ${{ secrets.ADMIN_PASSWORD }}
58+
USER_NAME: ${{ secrets.USER_NAME }}
59+
USER_PASSWORD: ${{ secrets.USER_PASSWORD }}
60+
run: npx cypress run --config-file cypress/cypress.e2e.config.ts
61+
- name: Archive Cypress videos & screenshots
62+
if: always()
63+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v4
64+
with:
65+
name: cypress-full-e2e-artifacts
66+
path: |
67+
cypress/videos/e2e
68+
cypress/screenshots/e2e
69+
70+
notify_full_e2e_end:
71+
name: Full E2E Tests Finished
72+
runs-on: ubuntu-latest
73+
needs: full-e2e
74+
if: always()
75+
steps:
76+
- name: Notify Full E2E results to Slack
77+
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2
78+
env:
79+
SLACK_COLOR: ${{ needs.full-e2e.result == 'success' && 'good' || 'danger' }}
80+
SLACK_TITLE: 'Full E2E Tests Finished'
81+
MSG_MINIMAL: false
82+
SLACK_MESSAGE: ${{ needs.full-e2e.result == 'success' && format('Full E2E test suite passed on ref `{0}`.', inputs.ref || github.ref_name) || format('<!here> Full E2E test suite {0} on ref `{1}`.', needs.full-e2e.result, inputs.ref || github.ref_name) }}

.github/workflows/code.end-to-end-test.nightly.yml

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Nightly E2E Tests
1+
name: Nightly E2E Health Check
22

33
on:
44
schedule:
@@ -19,18 +19,18 @@ jobs:
1919
- name: Send “E2E Tests Starting” to Slack
2020
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2
2121
env:
22-
SLACK_TITLE: 'E2E Tests Starting'
22+
SLACK_TITLE: 'Nightly E2E Health Check Starting'
2323
MSG_MINIMAL: true
24-
SLACK_MESSAGE: 'E2E tests have started'
24+
SLACK_MESSAGE: 'Nightly E2E health check (quick specs) has started...'
2525

2626
e2e:
2727
name: 🏃‍♀️ Run E2E Tests
2828
runs-on: ubuntu-latest
29-
needs: notify_e2e_start
29+
timeout-minutes: 15
3030
steps:
3131
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
3232
with:
33-
ref: develop
33+
ref: develop
3434
- name: Setup Node.js
3535
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v4
3636
with:
@@ -44,9 +44,14 @@ jobs:
4444
ADMIN_PASSWORD: ${{ secrets.ADMIN_PASSWORD }}
4545
USER_NAME: ${{ secrets.USER_NAME }}
4646
USER_PASSWORD: ${{ secrets.USER_PASSWORD }}
47-
run: npx cypress run --config-file cypress/cypress.e2e.config.ts
47+
# Quick specs only — excludes 000-cleanup and bedrock-model-workflow (long-running infra tests).
48+
# Update this list when adding new quick E2E specs.
49+
run: >-
50+
npx cypress run
51+
--config-file cypress/cypress.e2e.config.ts
52+
--spec "cypress/src/e2e/specs/admin.e2e.spec.ts,cypress/src/e2e/specs/user.e2e.spec.ts,cypress/src/e2e/specs/chat.e2e.spec.ts,cypress/src/e2e/specs/bedrock-quick.e2e.spec.ts"
4853
- name: Archive Cypress videos & screenshots
49-
if: failure() || always()
54+
if: always()
5055
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v4
5156
with:
5257
name: cypress-e2e-artifacts
@@ -64,8 +69,6 @@ jobs:
6469
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2
6570
env:
6671
SLACK_COLOR: ${{ needs.e2e.result == 'success' && 'good' || 'danger' }}
67-
SLACK_TITLE: 'E2E Tests Finished'
72+
SLACK_TITLE: 'Nightly E2E Health Check Finished'
6873
MSG_MINIMAL: false
69-
SLACK_MESSAGE_ON_SUCCESS: '✅ E2E tests passed on branch `${{ github.ref_name }}`.'
70-
SLACK_MESSAGE_ON_FAILURE: '<!here> ❌ E2E tests failed on branch `${{ github.ref_name }}`.'
71-
SLACK_MESSAGE: 'E2E tests completed with status `${{ job.status }}`.'
74+
SLACK_MESSAGE: ${{ needs.e2e.result == 'success' && format('Nightly E2E health check passed on branch `{0}`.', github.ref_name) || format('<!here> Nightly E2E health check {0} on branch `{1}`.', needs.e2e.result, github.ref_name) }}

.github/workflows/code.release.branch.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,11 @@ jobs:
9696
env:
9797
GH_TOKEN: ${{ github.token }}
9898
GITHUB_TOKEN: ${{ secrets.LEAD_ACCESS_TOKEN }}
99+
100+
run_full_e2e:
101+
name: Run Full E2E on Release Branch
102+
needs: MakeNewReleaseBranch
103+
uses: ./.github/workflows/code.e2e-full-test.weekly.yml
104+
with:
105+
ref: release/${{ github.event.inputs.release_tag }}
106+
secrets: inherit # pragma: allowlist secret

.github/workflows/test-and-lint.yml

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,14 @@ jobs:
6464
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v5
6565
with:
6666
python-version: "3.13"
67-
- name: Install dependencies
68-
run: |
69-
python -m pip install --upgrade pip
70-
# Try hash-verified install first, fall back to regular
71-
if [ -f "requirements-dev-hashes.txt" ]; then
72-
pip install --require-hashes -r requirements-dev-hashes.txt
73-
else
74-
pip install -r requirements-dev.txt
75-
fi
76-
pip install -e ./lisa-sdk
67+
- name: Install Python dependencies
68+
run: npm run install:python
7769
- name: Run tests
7870
env:
7971
ACCOUNT_NUMBER: '012345678901'
8072
REGION: us-east-1
8173
run: |
82-
make test-coverage
74+
npm run test:python:coverage
8375
pre-commit:
8476
name: Run All Pre-Commit
8577
needs: [send_starting_slack_notification]

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ __pycache__/
1818
*.key
1919
*.pem
2020
TIKTOKEN_CACHE
21+
# Ignore only top-level docs directory, not lib/docs
22+
/docs/
2123

2224
# CDK asset staging directory
2325
.cdk.staging

.pre-commit-config.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ repos:
77
- id: verify-config
88
name: Verify config file
99
description: Verify config file to check if certain parameters are empty
10-
entry: scripts/verify-config.sh
10+
entry: node scripts/verify-config.mjs
1111
verbose: true
12-
language: script
12+
language: system
1313
files: config-base.yaml
1414

1515
- repo: https://github.com/PyCQA/bandit
@@ -90,7 +90,7 @@ repos:
9090
args:
9191
- --max-line-length=120
9292
- --extend-immutable-calls=Query,fastapi.Depends,fastapi.params.Depends
93-
- --ignore=B008,B042,E203,W503 # Ignore error for function calls in argument defaults and exception __init__ args
93+
- --ignore=B008,B042,E203,E704,W503 # Ignore error for function calls in argument defaults and exception __init__ args
9494
exclude: ^(__init__.py$|.*\/__init__.py$|test/cdk/stacks/__baselines__/)
9595

9696

CHANGELOG.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,43 @@
1+
# v6.5.0
2+
3+
## Key Features
4+
5+
### Self-Service RAG Administration
6+
7+
A new RAG Admin role gives designated users full control over RAG repository operations, document ingestion, collection management, and pipeline configuration without granting full system administrator privileges. This reduces the operational bottleneck where every RAG change required a system administrator. Self-service RAG is especially useful in multi-tenant environments.
8+
9+
### Operations Metrics Dashboard
10+
11+
New dashboard reports track metrics across models and clusters, including inference latency, token usage, and batch ingestion job status. For example, customers can use the new input/output token reports to derive costs across users, groups, and models. This is useful for multi-tenant environments with a variety of end-user orgs. Also, model containers publish Prometheus metrics for vLLM, TEI, and TGI, and batch ingestion jobs report totals and failures for RAG document ingestion.
12+
13+
### Integrating Externally Deployed Models
14+
15+
Administrators can register deployed models that are not LISA-managed by providing a URL that can be accessed from the LiteLLM ECS cluster. These models appear and behave like other models in the platform.
16+
17+
### AWS Session Credentials
18+
19+
LISA now lets you attach AWS credentials to a chat session. While that session is active, MCP tools can use those credentials to call AWS APIs, so tool-based workflows can reach AWS resources in the same context as the conversation instead of requiring separate per-tool setup.
20+
21+
An example of a tool using this can be seen: lib/serve/mcp-workbench/src/examples/sample_tools/aws_operator_tools.py
22+
23+
## Other Key Changes
24+
25+
- Updated OpenSearch for new RAG collections to the latest supported version and indexing engine (existing collections continue to work as before)
26+
- Introduced optional audit logging for input/output from requests to LISA with opt-in and filtering
27+
- Implemented a deployment Lambda to ensure configured models are present in LiteLLM
28+
- Split Cypress E2E workflows into nightly health checks and weekly full suite runs, with API-based resource cleanup between runs
29+
- Updated LiteLLM to version 1.82.4
30+
31+
## Acknowledgements
32+
* @bedanley
33+
* @drduhe
34+
* @Ernest-Gray
35+
* @estohlmann
36+
* @gingerknight
37+
* @jmharold
38+
39+
**Full Changelog**: https://github.com/awslabs/LISA/compare/v6.4.0..v6.5.0
40+
141
# v6.4.0
242

343
## Key Features

0 commit comments

Comments
 (0)