Skip to main content

A Python library that uses LLMs to diagnose and explain exceptions in real-time

Project description

LLM Catcher

LLM Catcher is a Python library that uses Large Language Models to diagnose and explain exceptions in your code.

Features

  • Automatic exception diagnosis using LLMs
  • FastAPI middleware for handling API exceptions
  • Customizable exception handling
  • Support for custom prompts per exception type
  • Configurable via environment variables or code

Installation

pip install llm-catcher

Quick Start

  1. Create a .env file with your OpenAI API key:
LLM_CATCHER_OPENAI_API_KEY=your-api-key-here
  1. Choose your exception handling mode:
# Only handle uncaught exceptions (default)
LLM_CATCHER_HANDLED_EXCEPTIONS=UNHANDLED

# Or handle all exceptions
LLM_CATCHER_HANDLED_EXCEPTIONS=ALL

# Or specify exact exceptions
LLM_CATCHER_HANDLED_EXCEPTIONS=ValueError,TypeError,ValidationError

Examples

The examples/ directory contains several examples demonstrating different use cases:

1. Minimal Example (examples/minimal.py)

  • Basic usage with direct LLM exception diagnosis
  • Shows how to set up the diagnoser
  • Demonstrates basic error handling and diagnosis

2. FastAPI Integration (examples/fastapi_example.py)

  • Shows FastAPI middleware integration
  • Demonstrates custom error handlers
  • Includes Pydantic schema validation
  • Shows different error scenarios
  • Includes custom prompts for specific errors

3. CLI Example (examples/cli_example.py)

  • Demonstrates both UNHANDLED and ALL modes
  • Shows difference between caught and uncaught exceptions
  • Shows standard error handling vs LLM diagnosis
  • Includes stack trace handling

Run any example like this:

# Run minimal example
python examples/minimal.py

# Run FastAPI example
python examples/fastapi_example.py
# Then visit http://localhost:8000/docs

# Run CLI example
python examples/cli_example.py

Each example includes detailed comments and demonstrates best practices for using LLM Catcher in different contexts.

Configuration

All settings can be configured through environment variables or the Settings class:

Complete Settings Example

from llm_catcher.settings import get_settings

settings = get_settings()

# Required
settings.openai_api_key = "your-api-key"  # Or set via LLM_CATCHER_OPENAI_API_KEY

# Model Settings
settings.llm_model = "gpt-4"  # Options: "gpt-4", "gpt-3.5-turbo", "gpt-4-1106-preview"
settings.temperature = 0.2  # Range: 0.0-1.0

# Exception Handling
settings.handled_exceptions = ["ALL"]  # Options: "ALL", "UNHANDLED", or specific exceptions
settings.ignore_exceptions = ["SystemExit"]  # Exceptions to always ignore
settings.handle_unhandled_only = False  # Only handle exceptions without existing handlers

# Custom Handlers
settings.custom_handlers = {
    "ValueError": "Please explain this ValueError in simple terms",
    "TypeError": "Analyze this TypeError and suggest fixes",
}

# Debug Options
settings.include_traceback = False  # Include traceback in response

Environment Variables

The same settings can be configured via environment variables:

# Required
LLM_CATCHER_OPENAI_API_KEY=your-api-key-here

# Model Settings
LLM_CATCHER_LLM_MODEL=gpt-4
LLM_CATCHER_TEMPERATURE=0.2

# Exception Handling
LLM_CATCHER_HANDLED_EXCEPTIONS=ALL
LLM_CATCHER_IGNORE_EXCEPTIONS=SystemExit
LLM_CATCHER_HANDLE_UNHANDLED_ONLY=false

# Custom Handlers (as JSON)
LLM_CATCHER_CUSTOM_HANDLERS={"ValueError":"Please explain this ValueError in simple terms"}

# Debug Options
LLM_CATCHER_INCLUDE_TRACEBACK=false

Settings Reference

Setting Type Default Description
openai_api_key str None Your OpenAI API key (required)
llm_model str "gpt-4" LLM model to use
temperature float 0.2 Model temperature (0.0-1.0)
handled_exceptions List[str] ["UNHANDLED"] Exceptions to handle
ignore_exceptions List[str] ["SystemExit"] Exceptions to ignore
handle_unhandled_only bool False Only handle uncaught exceptions
custom_handlers Dict[str, str] {} Custom prompts per exception
include_traceback bool False Include traceback in response

Exception Handling Modes

UNHANDLED Mode (Default)

LLM_CATCHER_HANDLED_EXCEPTIONS=UNHANDLED
  • Only handles exceptions that aren't caught by other handlers
  • Respects existing exception handlers
  • Perfect for adding AI diagnosis without disrupting existing error handling

ALL Mode

LLM_CATCHER_HANDLED_EXCEPTIONS=ALL
  • Handles all exceptions (except those in ignore_exceptions)
  • Provides AI diagnosis even for caught exceptions
  • Useful when you want AI diagnosis for every error

Specific Exceptions

LLM_CATCHER_HANDLED_EXCEPTIONS=ValueError,TypeError,ValidationError
  • Only handles listed exception types
  • Can be combined with custom handlers

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/yourusername/llm-catcher.git
cd llm-catcher

# Create and activate virtual environment
python -m venv venv
source venv/bin/activate  # Linux/Mac
# or
.\venv\Scripts\activate  # Windows

# Install development dependencies
pip install -e ".[dev]"  # This installs the package with development extras

Running Tests

# Run all tests
pytest

# Run with coverage (requires pytest-cov, installed with [dev] extras)
pytest --cov=llm_catcher

# Run specific test file
pytest tests/test_settings.py -v

Examples

The examples/ directory contains two examples demonstrating different use cases:

  1. CLI Example (cli_example.py):

    • Demonstrates both UNHANDLED and ALL modes
    • Shows difference between caught and uncaught exceptions
    • Shows standard error handling vs LLM diagnosis
    • Includes stack trace handling
    # Run CLI example
    python examples/cli_example.py
    
  2. FastAPI Example (fastapi_example.py):

    • Shows FastAPI middleware integration
    • Demonstrates custom error handlers
    • Includes Pydantic schema validation
    • Shows different error scenarios and their handling
    • Includes custom prompts for specific errors
    # Run FastAPI example
    python examples/fastapi_example.py
    # Then test with curl or browser at http://localhost:8000/docs
    

Each example includes detailed comments and demonstrates best practices for using LLM Catcher in different contexts. The FastAPI example also includes Swagger documentation accessible through the /docs endpoint.

Notes

  • API key is required and must be provided via environment or settings
  • Settings are validated on initialization
  • Invalid values fall back to defaults
  • Environment variables take precedence over direct configuration
  • Custom handlers must be valid JSON when provided via environment
  • Stack traces are included in LLM prompts for better diagnosis

License

MIT License

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

llm_catcher-0.2.7.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

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

llm_catcher-0.2.7-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file llm_catcher-0.2.7.tar.gz.

File metadata

  • Download URL: llm_catcher-0.2.7.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.4

File hashes

Hashes for llm_catcher-0.2.7.tar.gz
Algorithm Hash digest
SHA256 5bd9df4a8b3190f2da1d4a8a05390820a575bc25b4e5a1843bd61f050308e4a8
MD5 45335f978ebbd228bb6d75ef589b31dd
BLAKE2b-256 b82b8e5f553548fdd2c7d074036116cc6ff5d12551c3f177a7ed312a2f377f7f

See more details on using hashes here.

File details

Details for the file llm_catcher-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: llm_catcher-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.4

File hashes

Hashes for llm_catcher-0.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 7460948125c97f9e730a7278922a26ba3b1aa890b50eab3461960e3754ee4fbb
MD5 9d9369501fe1faf548b18c34bf1f5af7
BLAKE2b-256 97a0e338d2467797739839ae1f90f5653126e2c74bf275d9fda917f2b2faf61b

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