Ell is a Python library that treats prompts as callable functions, transforming a Python function into a language model program where the docstring defines the system message and the return value defines the user message. It provides a framework for writing language model programs that can accept and return images, audio, and text natively within message objects, and supports chaining multiple model calls into a single function for multi-step reasoning or test-time compute.
The library decouples model selection from client instantiation through a registry that supports multiple provider backends, and includes a provider plugin interface for routing model calls to different backends. It automatically tracks every change to a prompt function with generated commit messages and full history, and logs the full input and output of every language model call for later analysis or dataset creation. A local web-based dashboard visualizes and compares prompt outputs across versions to catch regressions and track behavior over time.
Ell offers a model registry with temporary overrides for testing or routing, and a configuration system for setting global defaults for model parameters, storage, logging, and versioning behavior. The library persists prompt versions, invocations, and metadata to a local filesystem store for offline browsing and comparison.