|
| 1 | +<!-- mcp-name: io.github.awslabs/llm-evaluation-system --> |
| 2 | + |
1 | 3 | # Agentic AI-Guided Evaluation Platform |
2 | 4 |
|
3 | | -A web-based LLM evaluation platform deployed on AWS. Access it through a browser — each user gets their own isolated workspace. An expert AI agent guides you through the entire evaluation process via natural conversation: upload your documents, describe what you want to evaluate, and the agent handles dataset generation, judge configuration, execution, and analysis. |
| 5 | +An LLM evaluation system where you describe what you want to evaluate in natural language — an expert AI agent handles dataset generation, judge configuration, execution, and analysis end-to-end, and hands you back a PDF report. |
4 | 6 |
|
5 | 7 | ## Features |
6 | 8 |
|
7 | 9 | - **Expert agent interface** — The agent knows evaluation best practices, recommends criteria and validates configurations before execution. No config files or CLI expertise needed. |
8 | | -- **Jury system** — Multiple judges from different model families (e.g. Claude Sonnet, Nova Pro, Llama) each evaluate distinct aspects of every response — correctness, reasoning, completeness. Combining diverse judge families reduces self-preference bias, and aggregating weak signals from diverse judges and criteria produces stronger results than any single judge ([Verma et al., 2025](https://arxiv.org/abs/2502.20379), [Frick et al., 2025](https://arxiv.org/abs/2506.18203)). |
| 10 | +- **Jury system** — Multiple judges from different model families (e.g. Claude Sonnet, Nova Pro, Nemotron) each evaluate distinct aspects of every response — correctness, reasoning, completeness. Combining diverse judge families reduces self-preference bias, and aggregating weak signals from diverse judges and criteria produces stronger results than any single judge ([Verma et al., 2025](https://arxiv.org/abs/2502.20379), [Frick et al., 2025](https://arxiv.org/abs/2506.18203)). |
9 | 11 | - **Adaptable binary scoring** — Binary pass/fail per criteria rather than subjective numeric scales, shown to produce more reliable results across judges ([Chiang et al., 2025](https://arxiv.org/abs/2503.23339v2)). Criteria are tailored by the agent to what you're evaluating. |
10 | 12 | - **Document-grounded synthetic data** — Upload PDFs, knowledge bases, or product docs and generate QA pairs grounded in your actual content, reflecting real customer scenarios. |
11 | | -- **Agentic eval support** — Evaluate agent systems via Inspect AI's `sandbox_agent_bridge` (Strands, LangChain, any OpenAI-compatible framework). |
12 | | -- **Multi-tenant isolation** — Each user gets isolated data directories. Eval results stored as immutable `.eval` log files. |
13 | | -- **Integrated viewer** — Inspect AI's evaluation viewer embedded directly in the platform. |
| 13 | +- **Agentic eval support** — Evaluate any agent calling Bedrock (Strands, LangChain, custom boto3) with zero code modification via OpenTelemetry instrumentation. |
| 14 | + |
| 15 | +## Quick Start |
14 | 16 |
|
15 | | -## Prerequisites |
| 17 | +### Prerequisites |
16 | 18 |
|
17 | | -- AWS CLI configured with credentials |
18 | | -- An AWS account with Bedrock model access enabled |
| 19 | +- AWS credentials with Bedrock model access |
| 20 | +- [`uv`](https://docs.astral.sh/uv/getting-started/installation/) installed |
| 21 | +- Claude Code, Cursor, Kiro, VS Code, or any MCP-compatible IDE |
19 | 22 |
|
20 | | -That's it. The deploy script auto-installs Terraform, kubectl, and Helm locally. |
| 23 | +### Install |
21 | 24 |
|
22 | | -## Deploy |
| 25 | +Pick your IDE and paste / click. |
23 | 26 |
|
| 27 | +**Claude Code** — one CLI command: |
24 | 28 | ```bash |
25 | | -git clone https://github.com/awslabs/llm-evaluation-system.git && cd llm-evaluation-system |
26 | | -./deploy.sh |
| 29 | +claude mcp add-json eval '{"type":"stdio","command":"uvx","args":["--from","llm-evaluation-system","eval-mcp"]}' --scope user |
27 | 30 | ``` |
28 | 31 |
|
29 | | -The script will: |
30 | | -1. Install any missing tools to `.tools/` (no sudo required) |
31 | | -2. Validate AWS credentials and confirm the target account |
32 | | -3. Deploy infrastructure in two layers (data, then platform) |
33 | | -4. Build container images via CodeBuild |
34 | | -5. Deploy the application via Helm |
35 | | -6. Print the app URL and instructions for creating users |
36 | | - |
37 | | -## User Management |
| 32 | +**Cursor** — one-click deeplink: [Install eval-mcp in Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=eval&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyItLWZyb20iLCJsbG0tZXZhbHVhdGlvbi1zeXN0ZW0iLCJldmFsLW1jcCJdfQ==) |
| 33 | + |
| 34 | +**Kiro** — add to `~/.kiro/settings/mcp.json`: |
| 35 | +```json |
| 36 | +{ |
| 37 | + "mcpServers": { |
| 38 | + "eval": { |
| 39 | + "command": "uvx", |
| 40 | + "args": ["--from", "llm-evaluation-system", "eval-mcp"] |
| 41 | + } |
| 42 | + } |
| 43 | +} |
| 44 | +``` |
38 | 45 |
|
39 | | -After deployment, `deploy.sh` prompts you to create an initial admin user with a temporary password shown in the terminal. |
| 46 | +**Codex CLI** — add to `~/.codex/config.toml`, then restart Codex: |
| 47 | +```toml |
| 48 | +[mcp_servers.eval] |
| 49 | +command = "uvx" |
| 50 | +args = ["--from", "llm-evaluation-system", "eval-mcp"] |
| 51 | +``` |
40 | 52 |
|
| 53 | +**VS Code** (with GitHub Copilot MCP) — one CLI command: |
41 | 54 | ```bash |
42 | | -./manage-users.sh create user@example.com # Create user, show temp password |
43 | | -./manage-users.sh list # List all users |
44 | | -./manage-users.sh delete user@example.com # Delete a user |
| 55 | +code --add-mcp '{"name":"eval","command":"uvx","args":["--from","llm-evaluation-system","eval-mcp"]}' |
45 | 56 | ``` |
46 | 57 |
|
47 | | -Users must change the temporary password on first login. |
| 58 | +Using a coding agent to install? Point it at [INSTALL.md](INSTALL.md) — it handles the config edit, warms the uvx cache, and asks about optional S3 team sharing. |
48 | 59 |
|
49 | | -## Updating |
| 60 | +### Use |
50 | 61 |
|
51 | | -After code changes, re-run the deploy script: |
| 62 | +Ask your AI assistant to evaluate agents, models, or prompts — using a dataset you provide or one generated from your documents or context: |
| 63 | + |
| 64 | +- "Evaluate my agent at `./my_agent.py`" |
| 65 | +- "Compare Claude Sonnet vs Nova Pro on this dataset" |
| 66 | +- "Test these three prompt templates against my golden QA set" |
| 67 | +- "Generate a dataset from this PDF and run an eval" |
| 68 | + |
| 69 | +The agent picks the right mode, auto-generates whatever's missing (dataset, judge, criteria), runs it, opens the results viewer in your browser, and hands you a PDF report. |
| 70 | + |
| 71 | +## Team Sharing (S3) |
| 72 | + |
| 73 | +Share datasets, judges, configs, and eval results across your team via a shared S3 bucket. No servers needed. |
| 74 | + |
| 75 | +### Setup |
52 | 76 |
|
53 | 77 | ```bash |
54 | | -./deploy.sh |
| 78 | +uvx --from llm-evaluation-system eval-mcp init my-team-evals |
55 | 79 | ``` |
56 | 80 |
|
57 | | -It's fully idempotent — Terraform converges existing infrastructure, CodeBuild rebuilds images, Helm upgrades the release. |
| 81 | +User identity is auto-detected from your AWS credentials. Projects are auto-discovered from the bucket. |
58 | 82 |
|
59 | | -## Teardown |
| 83 | +### How it works |
60 | 84 |
|
61 | | -```bash |
62 | | -./destroy.sh |
| 85 | +``` |
| 86 | +s3://my-team-evals/ |
| 87 | + users/alice/ ← Alice's evals, datasets, judges, configs (auto-replicated on every write) |
| 88 | + users/bob/ ← Bob's |
| 89 | + projects/project-alpha/ ← shared team evals |
| 90 | + projects/project-beta/ ← shared team evals |
63 | 91 | ``` |
64 | 92 |
|
65 | | -This destroys the platform layer (EKS, CloudFront, ALB, Cognito, etc.) while **preserving data** (VPC, RDS database, S3 buckets, EBS volume). The script prints exact commands to delete preserved resources if you want a full cleanup. |
| 93 | +- Every write (eval result, dataset, judge, config, PDF report) auto-replicates to `users/{you}/` in the background |
| 94 | +- Every list/read auto-pulls from S3 first (debounced) so your local state mirrors S3 |
| 95 | +- `eval-mcp share my-project` → promote your stuff to a shared project prefix |
| 96 | +- `eval-mcp sync` → manual reconcile (used after long offline periods or on a fresh laptop) |
66 | 97 |
|
67 | | -To destroy the data layer as well (VPC, RDS, S3 buckets): |
| 98 | +### Create the bucket |
| 99 | + |
| 100 | +One person on the team runs this once: |
68 | 101 |
|
69 | 102 | ```bash |
70 | | -AWS_PROFILE=<your-profile> terraform -chdir=infra/data destroy -auto-approve |
| 103 | +git clone https://github.com/awslabs/llm-evaluation-system.git |
| 104 | +cd llm-evaluation-system/infra/modules/eval-logs-bucket |
| 105 | +terraform init |
| 106 | +terraform apply -var="bucket_name=my-team-evals" |
71 | 107 | ``` |
72 | 108 |
|
73 | | -> **Note:** `destroy.sh` sets `AWS_PROFILE` internally, so it does not persist to your shell session. You must set it explicitly when running Terraform commands manually. |
| 109 | +## Deploy Full Platform on EKS |
74 | 110 |
|
75 | | -## Security |
| 111 | +For a multi-user web app with Cognito auth, chat UI, and per-user isolation, the repo also ships an EKS deployment. This is the heavyweight path — for most users the MCP above is enough. |
76 | 112 |
|
77 | | -All traffic is served over HTTPS through CloudFront with WAF protection. The application runs inside a private VPC — the load balancer is not exposed to the internet. Authentication is handled via Amazon Cognito. Secrets are managed through AWS Secrets Manager, and database access uses IAM authentication with no static passwords. |
| 113 | +```bash |
| 114 | +./deploy.sh |
| 115 | +``` |
78 | 116 |
|
79 | | -## Run Locally |
| 117 | +The script auto-installs Terraform, kubectl, and Helm, then deploys the complete platform (Cognito auth, CloudFront, WAF, per-user isolation). |
80 | 118 |
|
81 | | -Test it on your machine with only Bedrock API access needed: |
| 119 | +### User Management |
82 | 120 |
|
83 | 121 | ```bash |
84 | | -# Using AWS SSO/profile |
85 | | -AWS_PROFILE=my-profile make dev |
86 | | - |
87 | | -# Using a Bedrock API key (no IAM credentials needed) |
88 | | -AWS_BEARER_TOKEN_BEDROCK=your-key make dev |
| 122 | +./manage-users.sh create user@example.com |
| 123 | +./manage-users.sh list |
| 124 | +./manage-users.sh delete user@example.com |
89 | 125 | ``` |
90 | 126 |
|
91 | | -Other commands: `make stop`, `make logs`, `make logs s=backend`, `make restart s=backend`, `make build`. |
| 127 | +### Teardown |
| 128 | + |
| 129 | +```bash |
| 130 | +./destroy.sh |
| 131 | +``` |
92 | 132 |
|
93 | | -Opens at **http://localhost:4001**. See [local/README.md](local/README.md) for details. |
| 133 | +Architecture details, OIDC config, Helm values, and manual deployment steps: [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md). |
94 | 134 |
|
95 | | -## Development |
| 135 | +## Contributing / Local Development |
96 | 136 |
|
97 | | -For architecture details, infrastructure reference, OIDC identity provider configuration, Helm chart structure, manual deployment steps, and troubleshooting, see [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md). |
| 137 | +See [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for how to clone, run from source, rebuild the viewer frontend, and contribute. |
98 | 138 |
|
99 | 139 | ## Acknowledgments |
100 | 140 |
|
101 | | -This platform is built on [Inspect AI](https://github.com/UKGovernmentBEIS/inspect_ai) by the UK AI Security Institute, an open-source framework for large language model evaluations. |
| 141 | +Built on [Inspect AI](https://github.com/UKGovernmentBEIS/inspect_ai) by the UK AI Security Institute. |
102 | 142 |
|
103 | 143 | ## Legal Disclaimer |
104 | 144 |
|
|
0 commit comments