Skip to main content

Chaos testing middleware for LangChain agents

Project description

LangChain Chaos Middleware ( Chaos Monkey )

A middleware for LangChain agents that intentionally injects failures (exceptions) into tool and model calls to test agent resilience.

Table of Contents

Features

  • Failure Injection: Randomly raises exceptions based on a configurable failure rate.
  • Targeted Chaos: Include or exclude specific tools from chaos.
  • Safety Mechanism: Requires an environment variable (ENABLE_CHAOS=true) to be active, preventing accidental production issues.
  • Customizable Exceptions: Choose which exceptions to raise (e.g., network errors, rate limits).

Installation

pip install langchain-chaos-middleware

Usage

Basic Example

import os
from langchain.agents import create_agent
from chaos_middleware import ChaosMiddleware, NETWORK_ERRORS

# 1. Enable Chaos (Safety Check)
os.environ["ENABLE_CHAOS"] = "true"

# 2. Configure Middleware
chaos_config = {
    "failure_rate": 0.2,  # 20% chance of failure
    "exception_types": NETWORK_ERRORS,
    "exclude_tools": ["save_memory"], # Don't break critical tools
}
chaos = ChaosMiddleware(chaos_config)

# 3. Inject into Agent
agent = create_agent(
    model="gpt-4o",
    tools=[...],
    middleware=[chaos]
)

# 4. Run Agent
# The agent will now experience random network errors!

Configuration

The ChaosMiddleware is initialized with a ChaosConfig dictionary:

Key Type Default Description
failure_rate float 0.1 Probability of failure (0.0 to 1.0).
exception_types List[Exception] [] List of exceptions to randomly choose from.
include_tools List[str] None If set, only these tools will be targeted.
exclude_tools List[str] [] These tools will NEVER fail.
seed int None Random seed for reproducible chaos.
safety_key str "ENABLE_CHAOS" Env var name required to enable the middleware.

Default Exception Profiles

The library provides pre-built lists of exceptions for common scenarios:

  • NETWORK_ERRORS: [TimeoutError, ConnectionError]
  • LLM_ERRORS: [RateLimitError, ServiceUnavailableError]
  • CRITICAL_ERRORS: [ValueError, KeyError]

Custom Exception Profiles

You can define your own lists of exceptions to simulate specific scenarios (e.g., database failures, custom API errors). Just create a list of exception classes and pass it to the exception_types configuration:

class DatabaseError(Exception):
    pass

MY_DB_ERRORS = [DatabaseError]

config = {
    "exception_types": MY_DB_ERRORS,
    # ...
}

Understanding Failure Rates

The failure_rate applies to each individual tool call, not to the entire agent task. If your agent needs to call multiple tools to complete a task, the overall success rate will be lower than you might expect.

Example: With a 20% failure rate per tool:

  • Single tool call: 80% chance of success
  • Two tool calls: 80% × 80% = 64% chance of success
  • Three tool calls: 80% × 80% × 80% = 51% chance of success

This means that even with a "low" 20% failure rate, an agent that needs to call 3 tools has nearly a 50% chance of experiencing at least one failure during the task.

Tip: Start with a low failure rate (e.g., 10-20%) and observe how it affects your agent's overall success rate before increasing it.

Important Note for Production

To prevent accidental chaos in production, the middleware checks for an environment variable (default: ENABLE_CHAOS). If this variable is not set to "true", the middleware acts as a pass-through and does nothing.

For Developers

Setting Up the Development Environment

  1. Clone the repository:

    git clone https://github.com/iroy2000/langchain-chaos-middleware.git
    cd langchain-chaos-middleware
    
  2. Create a virtual environment:

    python3 -m venv .venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    
  3. Install dependencies:

    # Install the package dependencies
    .venv/bin/pip install langchain langgraph
    
    # Install test dependencies
    .venv/bin/pip install python-dotenv langchain-openai
    

Running Tests

The project includes unit tests to verify the middleware functionality.

Run all tests:

.venv/bin/python -m unittest discover tests

Run only unit tests:

.venv/bin/python -m unittest tests.test_unit

Run integration tests (requires OpenAI API key):

# Create a .env file with your OpenAI API key
echo "OPENAI_API_KEY=your-key-here" > .env

# Run the integration test
.venv/bin/python tests/test_integration.py

Test Coverage

The test suite includes:

  • Safety mechanism tests: Verifies chaos is disabled without the safety key
  • Failure injection tests: Confirms failures are injected at the configured rate
  • Tool filtering tests: Validates include/exclude tool lists work correctly
  • Model call tests: Ensures chaos applies to model calls as well

Contributing

Contributions are welcome! Please ensure all tests pass before submitting a pull request:

.venv/bin/python -m unittest discover tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

langchain_chaos_middleware-0.1.4.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langchain_chaos_middleware-0.1.4-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file langchain_chaos_middleware-0.1.4.tar.gz.

File metadata

File hashes

Hashes for langchain_chaos_middleware-0.1.4.tar.gz
Algorithm Hash digest
SHA256 755fcacbdabdde4473d135434a4d5378ffca6c4bb206efc7959ebe9b3c5c531a
MD5 394bf255e3431d5ac82639b92ea70eff
BLAKE2b-256 6f879b980a02cf6c65c96f297252fe9b242e18a09e405cddc021503c67e57597

See more details on using hashes here.

File details

Details for the file langchain_chaos_middleware-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for langchain_chaos_middleware-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 3a6c31a5cc41dafaabe1f1164dbad33ed65298b348309101c3859012af7768f3
MD5 a5fa12f8891c4e8c35ce83bd142663d8
BLAKE2b-256 cb80a7b0cd4b7413e38075e4764c25256204a1707e839cacd6d3656a69bda773

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page