What is Ell?
Ell treats prompts as versioned, typed Python functions instead of opaque strings. Every prompt call is automatically tracked with inputs, outputs, and metadata — viewable in Ell Studio, a local visualization tool. It brings software engineering practices (versioning, testing, monitoring) to prompt engineering.
Answer-Ready: Ell is a Python library that treats AI prompts as versioned functions with automatic tracking, visualization in Ell Studio, and A/B testing. It brings software engineering practices to prompt engineering. 6k+ GitHub stars.
Best for: Teams iterating on prompts who need versioning and analytics. Works with: OpenAI, Anthropic, any OpenAI-compatible API. Setup time: Under 2 minutes.
Core Features
1. Prompts as Functions
import ell
@ell.simple(model="claude-sonnet-4-20250514")
def write_poem(topic: str) -> str:
"You are a creative poet."
return f"Write a short poem about {topic}"
# Every call is tracked automatically
poem = write_poem("sunset")2. Complex Prompts (Multi-Message)
@ell.complex(model="claude-sonnet-4-20250514")
def chat(history: list[ell.Message]) -> list[ell.Message]:
return [
ell.system("You are a helpful assistant."),
*history,
]3. Ell Studio — Visual Dashboard
ell-studio --storage ./ell_logs
# Opens http://localhost:8000Studio shows:
- Version history of each prompt function
- Input/output pairs for every call
- Latency and token usage metrics
- Diff view between prompt versions
4. Automatic Versioning
Ell detects when you change a prompt function and creates a new version:
# Version 1
@ell.simple(model="claude-sonnet-4-20250514")
def greet(name: str):
"You are friendly."
return f"Say hi to {name}"
# Version 2 (auto-detected)
@ell.simple(model="claude-sonnet-4-20250514")
def greet(name: str):
"You are friendly and enthusiastic."
return f"Enthusiastically greet {name}"5. Multimodal Support
from PIL import Image
@ell.simple(model="gpt-4o")
def describe_image(image: Image.Image):
return [
ell.system("Describe this image in detail."),
ell.user(["What do you see?", image]),
]Why Use Ell?
| Without Ell | With Ell |
|---|---|
| Prompts as strings in code | Prompts as typed functions |
| Manual copy-paste to track changes | Automatic version control |
| No visibility into prompt performance | Studio dashboard with metrics |
| Hard to compare prompt variants | Built-in A/B comparison |
FAQ
Q: How does it compare to LangChain? A: Ell is focused purely on prompt engineering — versioning, tracking, and iteration. LangChain is a broader framework for chains and agents.
Q: Does it work with Claude? A: Yes, Anthropic Claude is fully supported.
Q: Where is the data stored?
A: Locally in SQLite (default: ./ell_logs/). No data sent externally.