All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
First GitHub release of the 2.0 line. Identical in features to [2.0.0-beta] below, plus final pre-publication cleanup:
- Internal tracking references removed from source comments.
- Changelog security entry corrected to cover the full npm + Python dependency sweep.
- AgentCore scorer: submit raw OTEL documents to the Evaluate API. The
scorer previously reshaped OTEL event documents into span-shaped
documents before submission. The Bedrock AgentCore
EvaluateAPI classifies documents structurally and attaches event bodies (LLM messages, tool arguments) to their parent spans, so the reshaped events registered as untagged spans — failing every AgentCore evaluation with a multi-sessionValidationException. The scorer now submits the raw documents and lets the service handle span/event association.
- SDK v2 evaluator architecture. New
evaluator-*packages introduce a Python-first Lambda evaluator model:evaluator-sdk(Python SDK withEvaluator,ScorerABC,EtkClientfactory),evaluator-builtin(single Docker Lambda consolidating LLM-as-Judge, RAGAS, AgentCore, and DeepEval scorers),evaluator-agent-as-judge(agentic evaluator),evaluator-fmeval(FMEval integration), andevaluator-pyrit(PyRIT red-teaming). Evaluators run as Lambda functions dispatched via EventBridge and orchestrated by Step Functions; the toolkit exposes aLambdaEvaluatorCDK construct for registering them. - Python API service (
python-api). New Python Lambda service exposing the/v2/REST API for evaluator jobs, reports, results, and score writes. - Agent-as-Judge (AAJ) plugin. New agentic evaluator that lets an agent actively explore artifacts and gather evidence for scoring, deployed as a standalone Lambda in dedicated isolated subnets with deny-by-default IAM policy and least-privilege
execute-api:Invokepaths (HTTP-verb-scoped). Final scores can be derived from weighted partial scores via a built-in calculator tool. - Annotation filters on evaluation jobs. Evaluation jobs referencing a dataset (
DatasetReference) can now supply an annotation filter expression, so a job scores only the test cases matching annotation conditions (string/numeric conditions combinable with and/or/not). - PyRIT red-teaming integration. Automated adversarial red-teaming scorer for LLM security testing, wired into the SDK v2 evaluator model.
- DeepEval scorer. DeepEval integration added to
evaluator-builtinwith deployed-Lambda support for single-turn and multi-turn conversation evaluation. - Per-score
contextandreasonfields. Score results now carry an optionalcontextfield (arbitrary metadata persisted and returned) and areasonfield (free-text rationale forwarded through the API). Score data model updated end-to-end (Smithy → generated clients → python-api → evaluator-sdk). - Agentic ground-truth generation plugin (
plugin-gen-agentic). New plugin for generating multi-turn tool-call test cases for agentic applications, with augmentation and review-sampling coverage. Built on top ofplugin-gen-sdkshared utilities; the RAG generation plugin was also refactored to use them. - Terraform deployment path.
packages/terraform(customer-consumable root module +modules/{common,datastore,evaluation,generation,experiment,plugins,telemetry}) andpackages/terraform-deployment(monorepo wrapper with S3 + DynamoDB backend, bootstrap scripts, and CI/CD wiring). Reaches feature parity with the CDK deployment path: dual API Gateway (private + optional public), existing-VPC deployment, customer-managed KMS, AAJ evaluator, all built-in evaluators, and fullcdk-nag↔ Checkov security-control parity. - Dual API Gateway (private + optional public). The API Gateway construct now always creates a VPC-restricted private API and lets you additionally create a public EDGE or REGIONAL API via
publicEndpointType. Fully-private deployments setpublicEndpointType: 'DISABLED'. Both APIs share the same Lambda handlers. - Existing-VPC deployment support. Both CDK and Terraform deployment paths now accept an existing VPC + subnets + security groups instead of creating their own. Existing-VPC deployments must also supply an execute-api interface VPC endpoint (
EXISTING_API_GW_VPC_ENDPOINT_ID/existing_api_gw_vpc_endpoint_id): all evaluators call back through the private REST API, which is only reachable via this endpoint. - AI Gateway integration (optional). New
gatewayConfigconstruct prop andAI_GATEWAY_*env-var passthrough lets deployments route all plugin LLM calls through an OAuth2-fronted AI gateway (Bedrock Converse-compatible) for centralised cost tracking and budget enforcement. Fully opt-in; defaults to direct Bedrock. boto3user-agent identification. Toolkit-controlled boto3/botocore clients now inject agen-ai-evaluation-toolkit-on-aws/<version>user_agent_extraso downstream services can identify traffic originating from ETK.- CLI report/result CRUD, config-referenced submit, stage progression. CLI commands to list, describe, and manage reports and results end-to-end for SDK v2; submit a job by referencing an existing config; and observe stage progression through the evaluator lifecycle. Includes template fixes for the auto-generated CLI.
- SDK reference documentation. The documentation site now includes API references for the Python client, the Evaluator SDK, and the TypeScript client, generated as build artefacts.
- Solution Guide: Access Control section. New section covering IAM policy authoring for ETK API access with worked examples.
- Root package renamed from
genai-etkto@awssolutions/gen-ai-evaluation-toolkit, aligning with the rest of the@awssolutions/gen-ai-evaluation-toolkit-*family. - Full IAM ARN stored in ownership fields.
createdByandupdatedByon all persisted records now store the full IAM ARN of the caller (previously session name only), improving auditability of cross-account and federated identities. - AgentCore evaluator: agentic GTG compatibility. AgentCore evaluator improved to consume the multi-turn tool-call test cases emitted by the agentic generation plugin.
TestCaseDataMixinenhanced for agentic applications. Additional multi-tool-call and conversation-history fields on the shared test-case model.- MATS telemetry removed. The CDK constructs no longer emit MATS telemetry; deployments send no usage data to AWS-internal endpoints.
- S3 lifecycle rules on solution buckets. All solution-managed buckets now expire noncurrent object versions and clean up expired delete markers, preventing unbounded version growth on long-lived deployments.
- Evaluation plugin architecture replaced by SDK v2 evaluators. The
plugin-eval-{fmeval,llm-as-judge,ragas,agentcore,sdk}containerised-plugin packages are being retired in favour of the SDK v2evaluator-*model. Deployment now targets Lambda-based evaluators dispatched via EventBridge. Customers with custom evaluation plugins written against the previous SDK need to port them to theevaluator-sdkScorerinterface. - API path structure for evaluators. SDK v2 evaluators talk to a new
/v2/API surface served bypython-api. Direct callers of the previous plugin-oriented endpoints need to migrate; the CLI and generated clients handle this transparently. - Docker build pattern for generation plugins. Plugins using
plugin-gen-sdkmount the SDK at/plugin-gen-sdkin their container and usenpm ciwith an unmodified lockfile, replacing the previoussed-based path rewriting. Existing custom generation plugins require a Dockerfile update.
- Cross-stack
evaluationBucketreference retained to prevent deploy failures on stack updates that would otherwise orphan the reference. - RAGAS: validate
reference_tool_callstype before access. Fixed an unhelpful runtime error when the field wasn't present or was the wrong type. - AAJ: evaluation context scoped per run. The agent-as-judge evaluator previously reused evaluation context across runs in a warm Lambda, which could leak artifacts between test cases; context is now scoped to each run.
- AAJ evaluator: resolve evaluators from per-score params. Fixes cases where per-score evaluator overrides were not honoured.
evaluator-sdk: forward scorereasonto the API. The SDK previously dropped the reason field when submitting scores.plugin-gen-agentic: fail fast when no conversations load.dedupeAndSamplepreviously returned empty output silently; it now fails with an error, and S3 operations include error context for debuggability.- Terraform: shift
public[0]subnet out of legacy /24 range. Fixes a CIDR overlap for existing-VPC customers whose VPC used the legacy range. - API Gateway: stable CFN exports when toggling
publicEndpointType. Prevents CFN update failures when flipping a deployment between public and fully-private.
model_argsallowlist enforced fail-closed in SDK v2 LLM-as-Judge scorer. Theevaluator-builtinLLM-as-Judge scorer applies the same allowlist introduced for the 1.2.0 plugin, with stricter semantics: disallowed keys (e.g.endpoint_url,credentials_provider) now fail validation with an error listing the rejected keys, instead of being dropped with a warning. Configs relying on non-allowlistedmodel_argskeys must remove them.- Scheduler create/update validate the job template. Creating or updating an evaluation schedule now applies the same validation as direct job submissions (jobType requirements, test-case and scorer structure), so malformed schedules are rejected up front instead of failing silently when they fire.
- DynamoDB SSE explicitly enabled on the evaluator table (Terraform). The Terraform module now always sets server-side encryption explicitly on
evaluatortable, matching the CDK path. - AAJ:
execute-api:Invokescoped to least-privilege paths with HTTP-verb restrictions; identity policy enforced on the AAJ execution role. - Removed broad
Allow *from private API Gateway resource policy. The private API's resource policy now uses a DENY-only statement scoped toaws:SourceVpc, so same-account IAM path restrictions on caller roles are enforced end-to-end. Previously a broadAllow *would bypass path-level grants for same-account callers. - Dockerfiles: add explicit
USERinstructions. Resolves a CRITICAL security finding — every plugin container now runs as an explicit non-root user. - Request payloads no longer logged in experiment Lambdas. The API Gateway and EventBridge handler wrappers previously logged the full event, extracted body, and validated payload at
INFO— potentially exposing evaluation data (prompts, expected outputs, model config) to anyone with CloudWatch Logs access. They now log only non-sensitive request metadata. - Caller identity recorded in API audit logs. The
python-apirequest-logging middleware now appends the IAM caller ARN to every log line, so destructive and privileged operations (report deletion, job status updates, result writes) are attributable in application logs. - Dependency vulnerabilities cleared across npm and Python lockfiles. Overrides/bumps for
fast-uri,gitpython,protobuf,lxml,sagemaker, andaws-cdk-libclear the known critical and high advisories. A small number of remaining findings are blocked behind upstream major-version constraints (fmeval'stransformers<5/sagemaker<3pins, the MLflow client pin) or have no upstream fix, and are documented as deferred.
- Prepared the repository for public open-source release: consumer-facing README, CONTRIBUTING, DEVELOPMENT.md, and third-party dependency notices.
- Bedrock AgentCore evaluation plugin. New plugin (
plugin-eval-agentcore) enables evaluation of Amazon Bedrock AgentCore agents. Custom evaluators can be defined inline in the plugin config; on each run the plugin looks up the evaluator by name and callsUpdateEvaluatorif the remote definition has drifted from the local one, otherwise creates it. - Generative plugin SDK. New package (
plugin-gen-sdk) provides a TypeScript SDK for building generative test-case plugins, with shared types and a standardised entry-point contract. Seepackages/plugin-gen-sdk/README.mdfor the SDK reference and example plugin. - Lambda plugins. Evaluation plugins can now run as Lambda functions inside the solution VPC, in addition to the existing container-based plugin runtime. The Lambda runtime targets shorter-running evaluators with lower cold-start overhead and simpler IAM scoping.
- FMEval BedrockModelRunner support. The FMEval plugin now supports
BedrockModelRunnerfor advanced evaluation algorithms, expanding the range of foundation model evaluation techniques available. - Contribution guide. Added
CONTRIBUTING.mdwith guidance for contributors to the open-source repository. - Documentation site built and published from CI. The MkDocs documentation site is now built and published as part of the CI pipeline, replacing the previous manual publication process.
- Default model for generation plugins updated to Claude Haiku 4.5. Both generation plugins (RAG and LLM-as-judge test-case generation) now default to
global.anthropic.claude-haiku-4-5-20251001-v1:0, replacing the legacy Claude 3 Haiku model. Theglobal.prefix enables batch inference across all AWS regions without requiring per-region inference profile configuration. - Solution Guide and User Guide rewritten. Both guides have been substantially rewritten for clarity and accuracy (Solution Guide: 1,987 → ~700 lines; User Guide: 1,999 → ~740 lines). Includes a print-friendly layout for offline use.
- Docker images use content-addressable tags. ECR images are now tagged with content hashes rather than mutable labels, improving deployment reproducibility and cache invalidation.
- Plugin type interfaces simplified. External plugin type interfaces have been refactored for clarity, reducing the surface area that plugin authors need to understand.
- Plugin error messages include plugin name. Error messages from plugin execution now include the plugin name, making it easier to identify which plugin failed in multi-plugin evaluations.
aws-cdk-libupgraded to 2.237.1. Updated to the latest CDK release for new features and fixes.- Single root
npm installfor the monorepo build. The lockfile is now hoisted to the workspace root, so building from source needs only onenpm installat the repo root rather than per-package installs. Removes a class of CI lockfile-drift failures.
- Plugin Docker build pattern updated. Plugins using the generative SDK must now mount the SDK at
/plugin-gen-sdkin their container and usenpm ciwith an unmodified lockfile. This replaces the previoussed-based path rewriting approach. Existing custom plugins require a Dockerfile update.
- Schedule-triggered evaluation results retrievable. The
GetEvaluationAPI previously rejected the composite IDs (scheduleName_evaluationId) generated for schedule-triggered evaluations, blocking access to results. Validation now permits the underscore separator. - Evaluation config display from config file. Fixed an issue where evaluation configurations loaded from file were not displayed correctly in the CLI output.
- Empty path parameters return 400 instead of 500. API requests with empty path parameters now return a proper 400 Bad Request rather than an internal server error.
put-version-annotationresponse corrected. Fixed the response shape for the version annotation API endpoint.scheduleNamefield validation in job trigger Lambda. Fixed a Zod validation error when thescheduleNamefield was present in job schedule trigger events.- Built-in evaluators in experiment reporting. Fixed support for built-in evaluators in the experiment reporting Lambda, which previously only handled plugin-based evaluators.
- Pre-requisite Lambda memory limit increased. Increased the memory allocation for the pre-requisite check Lambda to prevent timeout failures on larger deployments.
- CLI
JobIdtype registration. Fixed missing type registration forJobIdin the CLI model binding registry, which caused serialisation errors. - Ensure Experiment Lambda builds for the correct CPU architecture on Linux build hosts. This avoids an issue where non x86_64 Linux hosts would build experiment-lambda with the wrong architecture for the target Lambda functions, resulting in runtime failures. x86_64 Linux CI and all Mac and Windows builders were unaffected.
- AWS SDK v3 packages upgraded to address known vulnerabilities. All
@aws-sdk/client-*and related packages bumped from the^3.7xxrange to^3.1000+(commit1a9517f0). Specific CVEs were not enumerated in commit messages; consumers running prior versions in customer environments should review their own dependency audits. - npm dependency vulnerabilities cleared. Bumped transitive dependencies across CDK, CLI, deployment, plugins, and tests packages to clear all known critical and high npm advisories. Two unfixable false positives bundled in third-party tooling remain.
model_argsallowlist in LLM-as-Judge plugin. Plugin configuration now restrictsmodel_argsto inference-tuning parameters (temperature,max_tokens,top_p,top_k,stop_sequences, and similar). Disallowed keys such asendpoint_urlorcredentials_providerare dropped with aWARNINGlog instead of being forwarded toChatBedrockConverse. See the plugin README for the full allowlist.- Length caps on MLflow
filterandorderByinputs.ListExperimentsnow rejectsfilterexpressions over 1024 characters, andorderBylists over 8 entries × 128 characters per entry, with aValidationException. Grammar validation remains delegated to MLflow's own parser. - Lambda principal removed from EventBridge Scheduler role trust. The scheduler role's trust policy previously listed both
scheduler.amazonaws.comandlambda.amazonaws.com; only the scheduler service ever assumes it, so the unused Lambda principal has been removed. - Removed undocumented
role_arnfrom FMEval plugin config. The field was never wired through to the S3 client used by the evaluator and never appeared in the README, so it has been deleted from the plugin configuration model.
Last version before refactor to monorepo.
- Test case score processing from S3. Fixed direct S3 processing of test case scores, eliminating an intermediate step that could fail on large result sets.
- Evaluator output handling. Fixed incorrect output formatting from evaluators that could cause downstream processing failures.
- Evaluation workflow commands. Fixed CLI commands for managing evaluation workflows.
- Scheduled evaluation cleanup for long-running tests. Fixed a resource leak where long-running scheduled evaluations did not properly invoke cleanup.
- Plugin CDK utilities exported. Fixed missing exports for plugin CDK utility functions that plugin authors need for custom infrastructure.
- AWS SDK dependencies updated. Bumped
@aws-sdk/client-*packages from3.921.0to3.939.0andaws-xray-sdkfrom3.11.0to3.12.0.
- Customer-managed KMS key support. Deployments can now use a customer-provided KMS key for encryption of data at rest, replacing the default AWS-managed key.
- Optional plugin deployment configuration. Plugin deployments can now be configured independently, allowing selective deployment of evaluation plugins.
NOTICES.mdextended to new packages. Open-source dependency attributions added to packages introduced since the previous release.- Experiment context in test case results. Test case results logged to MLflow now include evaluation context metadata.
- DatastoreTableName exported as stack output. The DynamoDB table name is now available as a CloudFormation stack export for cross-stack references.
- ECS Bedrock permissions scoped globally. Bedrock model invocation permissions for ECS tasks now use a global scope, removing the need for per-region configuration.
- Type exports cleaned up. Public type interfaces are now exported from a single entry point for cleaner consumption by plugin authors.
- ARN formats standardised. All IAM and resource ARNs now use a consistent format across the codebase.
- Integration test speed improvements. Test execution time reduced through parallelisation and removal of unnecessary waits.
- Lambda prebundling. Fixed Lambda prebundling to ensure all dependencies are correctly included in deployment packages.
- Plugin timeout error messages. Plugin timeouts now emit a clear, actionable error message instead of a generic failure.
- Evaluation happy-path failures. Fixed an issue where certain evaluation runs would fail silently on the happy path.
- CLI excess arguments rejected. The CLI now returns an error for unrecognised arguments instead of silently ignoring them.
- Plugin SDK wheel build configuration. Fixed missing packages specification in the Python wheel build config.
- pip version pinned for reproducible builds. Pinned pip to version 25.1 to prevent non-deterministic build failures.
- CLI package. New
gen-ai-evaluation-clipackage provides a command-line interface for all evaluation and experiment operations, with Mustache-templated output formatting and auto-generated commands from the Smithy model. - Smithy-based API model. The API contract is now defined in Smithy, enabling automated generation of the CLI, TypeScript client, and Python client from a single source of truth.
- TypeScript plugin SDK. New TypeScript SDK for building evaluation plugins, with standardised interfaces for plugin lifecycle and result reporting.
- Python plugin SDK. Python SDK for evaluation plugin development, with Hatch-based build tooling and a shared interface contract with the TypeScript SDK.
- Python API client. Generated Python client for the evaluation API, enabling programmatic access from Python-based workflows.
- Experiment logger service. ECS-based service for tracking experiment artifacts and run lifecycle via MLflow.
- LLM-as-judge evaluation plugin. First-party LLM-as-judge plugin implementing scoring with configurable Bedrock models and prompt-template-driven judgement criteria.
- Experiment tracking APIs. Added
CreateExperiment,GetExperiment, andListExperimentsAPIs with DynamoDB-backed storage and MLflow artifact logging. - Agentic evaluation support. RAGAS and test-case generation plugins now support agentic evaluation scenarios with multi-tool-call test cases.
- Monorepo migrated from pnpm to single npm workspace. The repository structure was consolidated from a pnpm monorepo into a single npm workspace, simplifying dependency management and build orchestration.
- CLI auto-generated from Smithy model. The CLI is now generated from the Smithy API model rather than hand-maintained, ensuring API parity and reducing maintenance burden.
- Default evaluation model set to Claude 3 Haiku. Evaluation plugins now default to Claude 3 Haiku for cost-effective scoring, replacing Nova Micro after model availability issues.
- Plugin images distributed via ECR. Evaluation plugin container images are now published to ECR and referenced by digest, replacing the previous S3 tarball distribution mechanism.
- Evaluation score aggregation fixed. The score aggregation Lambda now correctly computes aggregate metrics across evaluation runs.
- Default
maxResultsadded to all list APIs. List endpoints now return a bounded result set by default, preventing unbounded queries.
- API model restructured for Smithy generation. API request/response shapes were refactored to align with Smithy code generation requirements. Clients using the previous hand-crafted API types require updates.
- Annotation schema model decoupled from Smithy. The DynamoDB model for annotation schemas was separated from the Smithy API model, changing the internal storage format.
- Evaluation run termination handler. Fixed the termination Lambda to correctly reference the handler file after the ExperimentLambda package restructure.
- Zod validation error on pagination. Fixed a Zod schema error that caused pagination failures on list endpoints.
- Experiment parameter instantiation. Fixed incorrect experiment parameter construction that caused experiment creation failures.
- Virtualenv 20.35.0 compatibility. Fixed a Hatch compatibility issue triggered by virtualenv 20.35.0 that broke plugin builds.
- pip version pinned for reproducible builds. Pinned pip to prevent non-deterministic build failures caused by pip self-upgrade races.
- Vulnerable dependencies updated. Updated
setuptools>=78.1.1to resolve a vendored LGPLv3 dependency. AWS SDK packages updated across all plugins.
First fully approved release.
- Evaluation workflow with Step Functions orchestration. End-to-end evaluation pipeline using AWS Step Functions, with S3-based test data management, configurable expiry durations, and error-handling states that synchronise status with MLflow.
- Evaluation plugins: RAGAS, FMEval, Generate Test Cases, LLM-as-Judge. Four first-party evaluation plugins containerised and distributed via S3/ECR, covering retrieval-augmented generation, foundation model evaluation, synthetic test case generation, and LLM-based scoring.
- CLI for evaluation and experiment management. Command-line interface with commands for evaluation jobs, job schedulers, configurations, version annotations, and experiment tracking. Includes Mustache-templated output formatting.
- Job scheduling with EventBridge. Scheduled evaluation runs via EventBridge Scheduler, with
ListJobsfiltering byscheduleNameand pagination support. - Configuration listing and management APIs. APIs for listing, creating, and managing evaluation configurations with DynamoDB-backed auditing.
- Experiment API (initial).
ListExperimentsand experiment lifecycle APIs with MLflow integration for artifact tracking. - API Gateway access logging. Added structured access logging to the API Gateway for operational visibility.
- Documentation site. Customer-facing documentation site with automated build integration.
NOTICES.mdattribution files. Open-source dependency attributions added to all published packages to fulfil licence obligations.
- CDK libraries use peer dependencies.
aws-cdk-libandconstructsmoved topeerDependencieswith minimum versions, improving compatibility for customers using different CDK versions. - esbuild added as peer dependency. Avoids requiring Docker for Lambda bundling in customer environments.
- Deployment-specific VPC naming. VPC resources now use deployment-specific names and exported subnet identifiers for multi-deployment isolation.
- SSL enforcement in SecuredBucket. Fixed missing SSL transport enforcement on S3 buckets.
- API Gateway logging role. Fixed the IAM role configuration that prevented API Gateway from writing access logs.
- Step Functions S3 pagination limit. Added pagination limits to prevent unbounded S3 list operations in evaluation workflows.
- Throttling exceptions with retry. Added throttling exception handling and increased SDK
maxAttemptsfor Bedrock and DynamoDB clients. - Validation errors on input. Fixed multiple input validation issues that returned incorrect error responses.
- Log groups retained with 18-month retention. CloudFormation log groups now use
Retainremoval policy with 18-month retention. - Vulnerable dependencies patched. Updated packages with known vulnerabilities, including pinning
pillowfor build reproducibility. - Unused KMS constructs removed. Deleted dead
SecuredKeyconstruct and erroneous KMS references to reduce attack surface confusion.
Initial release reviewed within AWS.