AI News HubLIVE
In-site rewrite5 min read

Should we chaos test our agents?

EvalMonkey is an open-source, local benchmarking and chaos engineering framework for AI agents. It supports 11 agent frameworks, 19 standard benchmarks, and 23 chaos injections, interacting with any agent over HTTP without code changes.

SourceHacker News AIAuthor: himmi-01

Notifications You must be signed in to change notification settings

Fork 4

Star 24

BranchesTags

Open more actions menu

Folders and files

NameName

Last commit message

Last commit date

Latest commit

History

23 Commits

23 Commits

.github/workflows

.github/workflows

apps

apps

assets

assets

evalmonkey

evalmonkey

scripts

scripts

tests

tests

ui

ui

.env.example

.env.example

.gitignore

.gitignore

LICENSE

LICENSE

README.md

README.md

demo_rag_app.sh

demo_rag_app.sh

pyproject.toml

pyproject.toml

schema.yml

schema.yml

Repository files navigation

Agent Benchmarking & Chaos Engineering Framework

"Don't just trust your agent. Prove it works. Then break it."

Overview

Agents are fundamentally non-deterministic. They rely on external APIs, tool loops, and massive context windows. EvalMonkey is the ultimate, strictly local, open-source execution harness that enables developers to:

๐ŸŽฏ Benchmark Capabilities: Run standard Agent benchmark datasets against your agent endpoints natively!

๐Ÿ”ฅ Inject Chaos: Mutate headers, spike latency, and corrupt schemas dynamically to prove true resilience.

๐Ÿ“ˆ Track Production Reliability: Locally store all scores to visualize a single Production Reliability metric over time!

๐Ÿ›  Generate Improvement Evals: When scores are poor, automatically synthesise targeted test cases using your LLM โ€” then hand them to Claude Code or Cursor to fix your agent.

EvalMonkey natively supports evaluating ANY LLM: AWS Bedrock, Azure, GCP, OpenAI, and Ollama.

Note on API Keys: If you have special setups that generate long-lived, static API keys for Bedrock, Azure, or GCP, simply supply them in the .env! EvalMonkey seamlessly supports both standard IAM / Service Account credential flows and long-term stateless authentication strings.

๐Ÿš€ At a Glance

11 Agent Frameworks natively supported: CrewAI, LangChain, LlamaIndex, LangGraph, Pydantic AI, OpenAI Agents, Microsoft AutoGen, AWS Bedrock, Ollama, Strands, and custom HTTP endpoints.

19 Standard Benchmarks out-of-the-box: GSM8K, BIG-Bench Hard, HotpotQA, ToxiGen, MT-Bench, MBPP, and more โ€” all categorised by the agent type they target.

23 Chaos Injections ready to run: 12 client-side payload mutations + 11 server-side middleware injections โ€” all text-based, no GPU or vision dependencies.

Automatic Eval Asset Generation: Poor benchmark scores automatically produce traces.json, evals.json, and improvement_prompt.md โ€” one cat command away from Claude Code or Cursor.

๐Ÿ“Š EvalMonkey Web Dashboard

Visualize all your benchmark runs, track reliability scores over time, and inspect failure traces interactively!

EvalMonkey Main Dashboard showing scenario trends and score histories.

Deep-dive into specific benchmark runs and chaos tests.

โšก๏ธ Quick Start

Option A โ€” Let Claude Code or Cursor set it up for you (30 seconds)

Open Claude Code, Cursor, or any AI coding assistant and paste this prompt:

Set up EvalMonkey in my project so I can benchmark my AI agent.

  1. Clone https://github.com/Corbell-AI/evalmonkey into a sibling folder
  2. Run: pip install -e . inside that folder
  3. Copy .env.example to .env and ask me which LLM provider I want to use as the benchmark judge (OpenAI, Anthropic, Bedrock, or Ollama) โ€” then fill in the correct key
  4. Run: evalmonkey init --framework --name "My Agent" --port

Use the framework my agent is built with (crewai / langchain / openai / bedrock / autogen / ollama / strands / custom)

  1. Show me the generated evalmonkey.yaml and ask me to confirm the agent URL and response path are correct
  2. Run a quick smoke test: evalmonkey run-benchmark --scenario gsm8k --sample-agent rag_app --limit 2

to confirm everything is wired up correctly

  1. Then run the real benchmark against my agent: evalmonkey run-benchmark --scenario mmlu --limit 5
  2. Show me the score and explain what it means

The agent will handle cloning, installing, configuring your .env, and running the first benchmark โ€” all without you typing a single command.

Option B โ€” Manual Setup (5 minutes)

  1. Install

git clone https://github.com/Corbell-AI/evalmonkey cd evalmonkey pip install -e .

  1. Configure your LLM key (used only as the evaluation judge โ€” never for your agent)

cp .env.example .env

Open .env and set one of these depending on your LLM provider:

EVAL_MODEL=gpt-4o OPENAI_API_KEY=sk-... # OpenAI

โ€” OR โ€”

EVAL_MODEL=anthropic/claude-haiku-4-5 ANTHROPIC_API_KEY=sk-ant-... # Anthropic

โ€” OR โ€”

EVAL_MODEL=bedrock/anthropic.claude-3-haiku-20240307-v1:0 AWS_ACCESS_KEY_ID=... # AWS Bedrock

โ€” OR โ€” (no key needed)

EVAL_MODEL=ollama/llama3 # Local Ollama

  1. Smoke test with the built-in sample agent (no agent of your own needed yet)

evalmonkey run-benchmark --scenario gsm8k --sample-agent rag_app --limit 3

You should see 3 samples run and a score printed. โœ…

  1. Point it at your own agent

cd /path/to/your/agent/project evalmonkey init --framework crewai --name "My Agent" --port 8000

Edit the generated evalmonkey.yaml to set your agent's URL and response format

evalmonkey run-benchmark --scenario mmlu --limit 5

evalmonkey.yaml is discovered from the current working directory โ€” same convention as pytest and docker-compose.

๐Ÿค Works With Any Agent โ€” No Code Changes Required

EvalMonkey talks to your agent over plain HTTP. As long as your agent is running and has an endpoint URL, you're done. That's it.

Point EvalMonkey at your existing running agent

evalmonkey run-benchmark --scenario mmlu --target-url http://localhost:8000/chat

Your agent returns a different JSON format? Use two flags to map any request/response shape:

Flag What it does Example

--request-key Which key to send the question under message, prompt, input

--response-path Dot-path to extract the answer from output.text, choices.0.message.content, result

CrewAI agent that takes {"message":""} and returns {"reply":""}

evalmonkey run-benchmark --scenario mmlu \ --target-url http://localhost:8000/chat \ --request-key message \ --response-path reply

OpenAI-compatible endpoint returning {"choices":[{"message":{"content":""}}]}

evalmonkey run-benchmark --scenario arc \ --target-url http://localhost:8000/v1/chat/completions \ --request-key content \ --response-path choices.0.message.content

Supported Frameworks

Framework Notes

๐Ÿฆœ LangChain Any Chain, LCEL pipe, or AgentExecutor behind FastAPI

๐Ÿฆ™ LlamaIndex Any QueryEngine, ChatEngine, or ReActAgent

๐Ÿ•ธ๏ธ LangGraph Any compiled StateGraph or MessageGraph

๐Ÿ›ก๏ธ Pydantic AI Any validated Agent returning structured or text data

๐Ÿค– CrewAI Any Crew behind a /chat or custom endpoint

โœจ OpenAI Agents SDK Native OpenAI Chat Completions format supported via --response-path

โ˜๏ธ AWS Bedrock / Agent Core Any Bedrock endpoint, IAM or long-lived key

๐Ÿงฉ Microsoft AutoGen Any ConversableAgent behind HTTP

๐Ÿฆ™ Ollama Running locally at http://localhost:11434

๐Ÿงฌ Strands Enterprise support agents and chatbots

๐ŸŒ Any HTTP Agent Flask, Express.js, Go โ€” if it accepts POST it works

๐Ÿ“ฆ Don't have an HTTP endpoint yet? Use our ready-made thin adapters (click to expand)

Copy the relevant file from apps/framework_adapters/ next to your agent code, swap in your Crew/Chain/Agent, and run it. No changes needed to EvalMonkey.

langchain_adapter.py โ€” wraps any LangChain chain

crewai_adapter.py โ€” wraps any CrewAI Crew

openai_agents_adapter.py โ€” wraps OpenAI Agents SDK

bedrock_agentcore_adapter.py โ€” wraps AWS Bedrock Converse API

autogen_adapter.py โ€” wraps Microsoft AutoGen Crew

Each adapter is ~40 lines and exposes a /solve endpoint on localhost.

๐ŸŒ Supported Standard Benchmarks

EvalMonkey natively supports 19 off-the-shelf benchmark datasets pulled directly from HuggingFace. All benchmarks are text-only โ€” no vision, audio, or multimodal agent required. List them anytime via the CLI:

evalmonkey list-benchmarks

Scenario ID Agent Category Description

gsm8k ๐Ÿง  Reasoning Grade School Math word problems โ€” multi-step arithmetic & logic.

xlam ๐Ÿ”ง Tool Use XLAM Function Calling 60k โ€” tool execution & parameter structuring.

swe-bench ๐Ÿ’ป Coding SWE-Bench โ€” resolve real-world GitHub issues from a description only.

gaia-benchmark ๐Ÿ” Research GAIA โ€” multi-step real-world tasks requiring web/tool chaining.

human-eval ๐Ÿ’ป Coding HumanEval โ€” Python function synthesis from docstrings.

mmlu ๐Ÿ’ฌ Q&A MMLU โ€” general knowledge across 57 academic subjects.

arc ๐Ÿง  Reasoning ARC Challenge โ€” hard grade-school science multiple-choice.

truthfulqa ๐Ÿ›ก๏ธ Safety TruthfulQA โ€” detects hallucination and human-like falsehood mimicry.

hella-swag ๐Ÿง  Reasoning HellaSwag โ€” commonsense sentence-completion inference.

bbh ๐Ÿง  Reasoning BIG-Bench Hard โ€” 23 tasks where LLMs still fall below human baselines.

winogrande ๐Ÿ’ฌ Q&A WinoGrande โ€” pronoun disambiguation resistant to dataset shortcuts.

drop ๐Ÿ” Research DROP โ€” reading comprehension with embedded numerical & date math.

natural-questions ๐Ÿ’ฌ Q&A Natural Questions โ€” real Google search queries with Wikipedia answers.

hotpotqa ๐Ÿ” Research HotpotQA โ€” multi-hop reasoning across two Wikipedia documents.

mbpp ๐Ÿ’ป Coding MBPP โ€” entry-level Python function synthesis from plain English.

apps ๐Ÿ’ป Coding APPS โ€” competitive-programming & interview-style code challenges.

mt-bench ๐Ÿ“‹ Instruction Following MT-Bench โ€” multi-turn dialogues across writing, roleplay, reasoning, STEM.

alpacaeval ๐Ÿ“‹ Instruction Following AlpacaEval โ€” instruction quality judged by GPT-4 head-to-head.

toxigen ๐Ÿ›ก๏ธ Safety ToxiGen โ€” detects toxic/hateful content generation across 13 demographic groups.

๐Ÿ› ๏ธ Build Your Own Custom Benchmarks (click to expand)

Yes, people absolutely bring their own datasets! The most powerful way to test an agent is to grab 10-50 real questions from your production logs, dump them into a CSV, and evaluate your agent against them.

EvalMonkey natively supports auto-parsing .yaml, .json, and .csv files!

You don't need any complex ETL pipelines. Just drop a file (e.g. evals.csv, evals.json, or custom_evals.yaml) in your execution directory and pass it to EvalMonkey!

  1. CSV Example (evals.csv)

If using a CSV, just make sure you have the columns id and expected_behavior_rubric. Any other column you add (like question, topic, image_url) will be automatically gathered and sent in the JSON payload directly to your agent!

id expected_behavior_rubric question

get_benefits Must return the URL linking to the company hr portal Where do I sign up for medical benefits?

time_off Provide the exact number of standard vacation days (15) How many days of PTO do I get?

evalmonkey run-benchmark --scenario get_benefits --eval-file evals.csv

  1. JSON / YAML Example (evals.json)

If you use JSON or YAML, you must nest the agent payload keys explicitly under an input_payload dict object:

[ { "id": "onboarding_query", "description": "Test HR agent's ability to return the onboarding link.", "expected_behavior_rubric": "Must contain exactly the URL https://hr.example.com/benefits", "input_payload": { "question": "Where do I sign up for benefits?" } } ]

evalmonkey run-benchmark --scenario onboarding_query --eval-file evals.json

๐Ÿ› ๏ธ Experiences

Experience 1: Local Sample Agents (Single Command Start)

Easiest Experience: Test our built-in sample agents with a single command! EvalMonkey will spawn the sample agent in the background automatically and run the benchmark.

Run against just the first 5 records

evalmonkey run-benchmark --scenario gsm8k --sample-agent rag_app

Run a statistically robust test against 50 different records!

evalmonkey run-benchmark --scenario gsm8k --sample-agent rag_app --limit 50

Metrics Output:

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ Benchmark Results โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ Scenario gsm8k โ”‚ โ”‚ Score 90/100 (Diff: +5) โ”‚ โ”‚ Previous 85/100 โ”‚ โ”‚ Reasoning Agent correctly utilized calculator for ..

[truncated for AI cost control]