This release is a pre-release and may not be stable for production use.
elizaOS Core (Python)
The Python implementation of elizaOS Core - the runtime and types for elizaOS AI agents.
Installation
From Repository (Development)
# From the repo root
cd eliza
# Create and activate virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install the core package
pip install -e packages/python
# Install an LLM provider (required)
pip install -e plugins/plugin-openai/python
# Install a database adapter (required for message handling)
pip install -e plugins/plugin-inmemorydb/python
From PyPI
pip install elizaos elizaos-plugin-openai elizaos-plugin-inmemorydb
Quick Start
Run the Chat Example
# Set your OpenAI API key
export OPENAI_API_KEY="your-key"
# Run the example
python examples/chat/python/chat.py
Create Your Own Agent
from __future__ import annotations
import asyncio
import os
from pathlib import Path
from dotenv import load_dotenv
load_dotenv() # Load .env file
from uuid6 import uuid7
from elizaos import Character, ChannelType, Content, Memory
from elizaos.runtime import AgentRuntime
from elizaos_plugin_openai import get_openai_plugin
from elizaos_plugin_inmemorydb import plugin as inmemorydb_plugin
async def main() -> None:
# Define your agent's character
character = Character(
name="Eliza",
username="eliza",
bio="A helpful AI assistant.",
system="You are helpful and concise.",
)
# Create runtime with plugins
runtime = AgentRuntime(
character=character,
plugins=[
get_openai_plugin(), # LLM provider
inmemorydb_plugin, # Database adapter
],
)
user_id = uuid7()
room_id = uuid7()
try:
await runtime.initialize()
print(f"🤖 Chat with {character.name} (type 'quit' to exit)\n")
while True:
user_input = input("You: ")
if not user_input.strip() or user_input.lower() in ("quit", "exit"):
break
message = Memory(
entity_id=user_id,
room_id=room_id,
content=Content(
text=user_input,
source="cli",
channel_type=ChannelType.DM.value,
),
)
result = await runtime.message_service.handle_message(runtime, message)
print(f"\n{character.name}: {result.response_content.text}\n")
print("Goodbye! 👋")
finally:
await runtime.stop()
if __name__ == "__main__":
asyncio.run(main())
Features
- Strong typing with Pydantic models and full type hints
- Plugin architecture for extensibility
- Character configuration for defining agent personalities
- Memory system for conversation history and knowledge
- Event system for reactive programming
- Service abstraction for external integrations
Runtime Settings (cross-language parity)
These settings are read by the runtime/message loop to keep behavior aligned with the TypeScript and Rust implementations:
ALLOW_NO_DATABASE: when truthy, the runtime may run without a database adapter (benchmarks/tests).USE_MULTI_STEP: when truthy, enable the iterative multi-step workflow.MAX_MULTISTEP_ITERATIONS: maximum iterations for multi-step mode (default:6).
Benchmark & Trajectory Tracing
Benchmarks and harnesses can attach metadata to inbound messages:
message.metadata.trajectoryStepId: enables trajectory tracing for provider access + model calls.message.metadata.benchmarkContext: enables theCONTEXT_BENCHprovider and setsstate.values["benchmark_has_context"]=True, which forces action-based execution to exercise the full loop.
Model output contract (XML preferred, plain text tolerated)
The canonical message loop expects model outputs in the <response>...</response> XML format (with <actions>, <providers>, and <text> fields).
Some deterministic/offline backends may return plain text instead. In that case, the runtime will treat the raw output as a simple REPLY so the system remains usable even when strict XML formatting is unavailable.
Core Types
UUID- Universally unique identifierContent- Message content with text, actions, attachmentsMemory- Stored message or informationEntity- User or agent representationRoom- Conversation contextWorld- Collection of rooms and entities
Components
Action- Define agent capabilitiesProvider- Supply contextual informationEvaluator- Post-interaction analysisService- Long-running integrations
Plugin System
from elizaos import Plugin, Action, Provider
my_plugin = Plugin(
name="my-plugin",
description="A custom plugin",
actions=[...],
providers=[...],
)
Available Plugins
LLM Providers
| Plugin | Path | Description |
|---|---|---|
| OpenAI | plugins/plugin-openai/python |
GPT-4, embeddings, DALL-E |
| Anthropic | plugins/plugin-anthropic/python |
Claude models |
| Ollama | plugins/plugin-ollama/python |
Local LLMs |
| Groq | plugins/plugin-groq/python |
Fast inference |
Database Adapters
| Plugin | Path | Description |
|---|---|---|
| InMemoryDB | plugins/plugin-inmemorydb/python |
Ephemeral storage (dev/testing) |
| SQL | plugins/plugin-sql/python |
PostgreSQL/PGLite |
Platform Integrations
| Plugin | Path | Description |
|---|---|---|
| Telegram | plugins/plugin-telegram/python |
Telegram bots |
| Discord | plugins/plugin-discord/python |
Discord bots |
Environment Variables
# Required for OpenAI plugin
OPENAI_API_KEY=sk-...
# Optional
LOG_LEVEL=INFO
Development
# Install development dependencies
pip install -e ".[dev]"
# (Reproducible/pinned) Generate lockfiles used by CI
pip install pip-tools
pip-compile requirements.in -o requirements.lock
pip-compile requirements-dev.in -o requirements-dev.lock
# Run tests
pytest
# Type checking
mypy elizaos
# Linting
ruff check elizaos
Examples
See examples/ directory for complete working examples:
examples/chat/python/- CLI chat agentexamples/telegram/python/- Telegram botexamples/discord/python/- Discord botexamples/rest-api/fastapi/- REST API server
License
MIT
Metadata
Release files for elizaos 2.0.0a5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| elizaos-2.0.0a5.tar.gz | 296.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| elizaos-2.0.0a5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 711.1 kB
Release files / elizaos-2.0.0a5.tar.gz
| Download URL | elizaos-2.0.0a5.tar.gz |
|---|---|
| Size | 296.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
76cff9c69e376f3f6cbc3967a6d12643ce024da3bd9a5bf6a57ddfa3d4a422f8
|
|
BLAKE2b-256 checksum How to use checksums |
6d29882b27863358dce81310ee3505411b22d7e0391230f23ff9c62827bbd989
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / elizaos-2.0.0a5-py3-none-any.whl
| Download URL | elizaos-2.0.0a5-py3-none-any.whl |
|---|---|
| Size | 414.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f33b341945d9195ca2163e9bc87e4926cdda20ef5c78e5091bf9f55547f2b2d5
|
|
BLAKE2b-256 checksum How to use checksums |
567e8d8215c7337c05ce21952c66151f5528c58c3a34a4d07791c8b77ceb5bf1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|