# madcowd/ell

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/madcowd-ell).**

5,874 stars · 344 forks · Python · MIT

## Links

- GitHub: https://github.com/MadcowD/ell
- Homepage: http://docs.ell.so/
- awesome-repositories: https://awesome-repositories.com/repository/madcowd-ell.md

## Topics

`ai` `prompt-engineering`

## Description

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.

## Tags

### Part of an Awesome List

- [Prompt Programming Libraries](https://awesome-repositories.com/f/awesome-lists/ai/language-model-libraries/prompt-programming-libraries.md) — Encapsulates prompts as callable Python functions with automatic versioning, logging, and multimodal support.

### Software Engineering & Architecture

- [Prompt](https://awesome-repositories.com/f/software-engineering-architecture/higher-order-function-wrapping/function-decorators/prompt.md) — Transforms a Python function into a language model program using its docstring and return value to define system and user messages.
- [Model Client Fallback Resolutions](https://awesome-repositories.com/f/software-engineering-architecture/dependency-graph-resolution/concurrent-dependency-resolution/multi-source-dependency-resolution/fallback-resolution-strategies/model-client-fallback-resolutions.md) — Returns an OpenAI client and a fallback flag for a given model name, decoupling model selection from client instantiation.
- [Multimodal Type Coercions](https://awesome-repositories.com/f/software-engineering-architecture/type-coercion-utilities/multimodal-type-coercions.md) — Accepts and returns images, audio, and other media alongside text by coercing them into a unified message object format.

### Artificial Intelligence & ML

- [AI Model Clients](https://awesome-repositories.com/f/artificial-intelligence-ml/ai-model-clients.md) — Provides a client resolution mechanism that returns an OpenAI client and fallback flag for a given model name. ([source](http://docs.ell.so/core_concepts/configuration.html))
- [Prompt Chaining](https://awesome-repositories.com/f/artificial-intelligence-ml/language-model-orchestration/ai-workflow-patterns/prompt-chaining.md) — Implements prompt chaining by composing multiple language model programs into sequential sub-tasks with output passing. ([source](https://docs.ell.so/))
- [Model Provider Plugins](https://awesome-repositories.com/f/artificial-intelligence-ml/model-provider-plugins.md) — Provides a plugin interface for registering third-party inference services and custom model providers. ([source](http://docs.ell.so/core_concepts/configuration.html))
- [Multimodal Prompt Embedding](https://awesome-repositories.com/f/artificial-intelligence-ml/multimodal-prompt-embedding.md) — Integrates images, audio, and external documents into prompts via file paths or encoded data using rich type coercion. ([source](http://docs.ell.so/))
- [Provider Abstraction Layers](https://awesome-repositories.com/f/artificial-intelligence-ml/openai-api-clients/provider-abstraction-layers.md) — Decouples model selection from client instantiation with a registry for multiple provider backends.
- [Multimodal Prompting](https://awesome-repositories.com/f/artificial-intelligence-ml/prompt-engineering-guides/multimodal-prompting.md) — Accepts and returns images, audio, and text natively within message objects for multimodal model interactions.
- [Versioned Prompt Variants](https://awesome-repositories.com/f/artificial-intelligence-ml/prompt-engineering/versioned-prompt-variants.md) — Tracks every change to a prompt function automatically with generated commit messages and full history.
- [Prompt Programming Libraries](https://awesome-repositories.com/f/artificial-intelligence-ml/prompt-programming-libraries.md) — Defines a prompt as a callable Python function that combines system instructions, user messages, and model parameters into a reusable subroutine. ([source](https://cdn.jsdelivr.net/gh/madcowd/ell@main/README.md))
- [Function-Based](https://awesome-repositories.com/f/artificial-intelligence-ml/reasoning-chains/function-based.md) — Ships a mechanism to chain several language model calls into a single function for multi-step reasoning. ([source](http://docs.ell.so/))
- [Reasoning Pipelines](https://awesome-repositories.com/f/artificial-intelligence-ml/reasoning-models/reasoning-pipelines.md) — Chains several language model calls into a single function for multi-step reasoning or test-time compute.
- [Temporary Model Registry Overrides](https://awesome-repositories.com/f/artificial-intelligence-ml/model-architecture-registries/model-registries/model-routing-registries/temporary-model-registry-overrides.md) — Maintains a global model configuration map that can be temporarily swapped within a context manager for testing or routing.
- [Global Default Configurations](https://awesome-repositories.com/f/artificial-intelligence-ml/prompt-engineering-environments/global-default-configurations.md) — Sets global defaults for model parameters, storage, logging, and versioning behavior in a single initialization call. ([source](http://docs.ell.so/core_concepts/configuration.html))

### Development Tools & Productivity

- [Prompt Version Trackers](https://awesome-repositories.com/f/development-tools-productivity/prompt-information-providers/contextual-prompt-tooltips/prompt-templates/prompt-version-trackers.md) — Automatically tracks every change to a prompt function with generated commit messages and full history.
- [Multimodal Output Selectors](https://awesome-repositories.com/f/development-tools-productivity/json-output-formats/csv-output-formats/structured-scan-result-outputs/multimodal-output-selectors.md) — Allows returning either plain text or structured message objects with tool calls and multimodal content from a single function. ([source](https://docs.ell.so/))

### DevOps & Infrastructure

- [Prompt Versioning Engines](https://awesome-repositories.com/f/devops-infrastructure/version-control-automation/commit-based-versioning-engines/prompt-versioning-engines.md) — Captures prompt versions by combining static code analysis with runtime invocation snapshots, generating commit messages automatically.

### Programming Languages & Runtimes

- [Language Model Programming Libraries](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/programming-languages/language-model-programming-libraries.md) — Treats prompts as callable Python functions, transforming a Python function into a language model program.
- [Invocation Logging](https://awesome-repositories.com/f/programming-languages-runtimes/block-value-returns/method-return-values/invocation-logging.md) — Captures and stores the full input and output of every language model call for later analysis, fine-tuning, or dataset creation. ([source](http://docs.ell.so/))

### System Administration & Monitoring

- [Prompt and Agent Versioning](https://awesome-repositories.com/f/system-administration-monitoring/monitoring-and-observability/observability-platforms/metric-performance-monitors/model-performance-tracking/prompt-and-agent-versioning.md) — Tracks prompt iterations and analyzes performance shifts over time via a local dashboard.
- [Prompt Output Comparison Dashboards](https://awesome-repositories.com/f/system-administration-monitoring/monitoring-and-observability/observability-platforms/metric-performance-monitors/model-performance-tracking/prompt-and-agent-versioning/prompt-output-comparison-dashboards.md) — Provides a local dashboard to visualize, compare, and track prompt outputs across different versions and runs.
- [Prompt Version Dashboards](https://awesome-repositories.com/f/system-administration-monitoring/observability-studios/prompt-version-dashboards.md) — Launches a web-based UI to visualize, compare, and debug prompt versions and their outputs over time.

### Data & Databases

- [Local Interaction Stores](https://awesome-repositories.com/f/data-databases/local-data-stores/local-interaction-stores.md) — Persists prompt versions, invocations, and metadata to a local filesystem store for offline browsing and comparison.
