AI debate engine framework - importable Python library
Project description
Dialectus Engine
A Python library for orchestrating AI-powered debates with multi-provider model support.
Overview
The Dialectus Engine is a standalone Python library that provides core debate orchestration logic, including participant coordination, turn management, AI judge integration, and multi-provider model support. It's designed to be imported and used by other applications to build debate systems.
Components
- Core Engine (
debate_engine/) - Main debate orchestration logic - Models (
models/) - AI model provider integrations (Ollama, OpenRouter) - Configuration (
config/) - System configuration management - Judges (
judges/) - AI judge implementations with ensemble support - Formats (
formats/) - Debate format definitions (Oxford, Parliamentary, Socratic, Public Forum)
Installation
From PyPI
pip install dialectus-engine
From Source
# Clone the repository
git clone https://github.com/dialectus-ai/dialectus-engine.git
cd dialectus-engine
# Install in development mode
pip install -e .
# Or install with dev dependencies
pip install -e ".[dev]"
As a Dependency
Add to your requirements.txt or pyproject.toml:
dialectus-engine>=0.1.0
Or install directly from git:
pip install git+https://github.com/dialectus-ai/dialectus-engine.git@main
Quick Start
import asyncio
from debate_engine.core import DebateEngine
from models.manager import ModelManager
from config.settings import AppConfig, ModelConfig
async def run_debate():
# Load configuration
config = AppConfig.from_json_file("debate_config.json")
# Set up model manager
model_manager = ModelManager()
# Register models
for model_id, model_config in config.models.items():
model_manager.register_model(model_id, model_config)
# Create debate engine
engine = DebateEngine(
config=config,
model_manager=model_manager
)
# Run debate
transcript = await engine.run_debate()
print(transcript)
asyncio.run(run_debate())
Configuration
The engine uses debate_config.json for system configuration. To get started:
# Copy the example configuration
cp debate_config.example.json debate_config.json
# Edit with your settings and API keys
nano debate_config.json
Key configuration sections:
- Models: Define debate participants with provider, personality, and parameters
- Providers: Configure Ollama (local) and OpenRouter (cloud) settings
- Judging: Set evaluation criteria and judge models
- Debate: Default topic, format, and word limits
For detailed configuration documentation, see CONFIG_GUIDE.md.
Features
Multi-Provider Model Support
- Ollama: Local model management with hardware optimization
- OpenRouter: Cloud model access to 100+ models
- Async streaming: Chunk-by-chunk response generation
- Auto-discovery: Dynamic model listing from all configured providers
- Caching: In-memory cache with TTL for model metadata
Debate Formats
- Oxford: Classic opening/rebuttal/closing structure
- Parliamentary: British-style government vs. opposition
- Socratic: Question-driven dialogue format
- Public Forum: American high school debate style
AI Judge System
- LLM-based evaluation: Detailed criterion scoring
- Ensemble judging: Aggregate decisions from multiple judges
- Structured decisions: JSON-serializable judge results
- Configurable criteria: Logic, evidence, persuasiveness, etc.
Architecture
Key architectural principles:
- Library-first: Designed to be imported by other applications
- Provider agnostic: Support for multiple AI model sources
- Async by default: All model interactions are async
- Type-safe: Strict Pyright configuration with modern type hints
- Pydantic everywhere: All config and data models use Pydantic v2
- Configurable: JSON-based configuration with validation
Technology Stack
- Python 3.13+ with modern type hints (
X | None,list[T],dict[K, V]) - Pydantic v2 for data validation and settings management
- OpenAI SDK for OpenRouter API integration (streaming support)
- httpx for async HTTP requests (Ollama provider)
- asyncio for concurrent debate operations
Usage Examples
Listing Available Models
from models.manager import ModelManager
async def list_models():
manager = ModelManager()
models = await manager.get_all_models()
for model_id, model_info in models.items():
print(f"{model_id}: {model_info.description}")
Running a Custom Format
from formats.registry import format_registry
# Get available formats
formats = format_registry.list_formats()
# Load a specific format
oxford = format_registry.get_format("oxford")
phases = oxford.phases()
Ensemble Judging
from judges.factory import JudgeFactory
# Create judge with multiple models
config.judging.judge_models = ["openthinker:7b", "llama3.2:3b", "qwen2.5:3b"]
judge = JudgeFactory.create_judge(config.judging, model_manager)
# Get aggregated decision
decision = await judge.judge_debate(context)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dialectus_engine-0.1.0.tar.gz.
File metadata
- Download URL: dialectus_engine-0.1.0.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d8d25f1c0f92c199cb0c78a819aecb552a4095a7f729952bfd06f97a254a061
|
|
| MD5 |
cb2ce38e0108776d2001f4dd703d2778
|
|
| BLAKE2b-256 |
3f175bf5c5afd6e4bfa74f45bf9fe781d129fcf398e33dbe3fb2777299d837c3
|
Provenance
The following attestation bundles were made for dialectus_engine-0.1.0.tar.gz:
Publisher:
publish.yml on Dialectus-AI/dialectus-engine
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dialectus_engine-0.1.0.tar.gz -
Subject digest:
9d8d25f1c0f92c199cb0c78a819aecb552a4095a7f729952bfd06f97a254a061 - Sigstore transparency entry: 601123649
- Sigstore integration time:
-
Permalink:
Dialectus-AI/dialectus-engine@3d391b05b54b36479f9089da0828c2eff8818b78 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Dialectus-AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3d391b05b54b36479f9089da0828c2eff8818b78 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file dialectus_engine-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dialectus_engine-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77e2b97a81f743fdf1ec0a1b36ebc3d8f1eda62ebf6db6e08239848ceec7d731
|
|
| MD5 |
a5aed9408923b959cdfd5a6aeff7a91c
|
|
| BLAKE2b-256 |
cf5bb5afc04805ca26f54a1d4debcd23fc0b4ca8d9057ea91fd26760403ab5b0
|
Provenance
The following attestation bundles were made for dialectus_engine-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Dialectus-AI/dialectus-engine
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dialectus_engine-0.1.0-py3-none-any.whl -
Subject digest:
77e2b97a81f743fdf1ec0a1b36ebc3d8f1eda62ebf6db6e08239848ceec7d731 - Sigstore transparency entry: 601123651
- Sigstore integration time:
-
Permalink:
Dialectus-AI/dialectus-engine@3d391b05b54b36479f9089da0828c2eff8818b78 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Dialectus-AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3d391b05b54b36479f9089da0828c2eff8818b78 -
Trigger Event:
workflow_dispatch
-
Statement type: