VotingAI 🗳️
VotingAI: Democratic Multi-Agent Systems - A research-grade academic framework that enables democratic consensus in multi-agent systems through configurable voting mechanisms with enterprise security, fairness guarantees, and statistical rigor. Perfect for code reviews, architecture decisions, content moderation, medical diagnosis, and safety-critical scenarios requiring transparent group decision-making.
🗳️ Democratic Voting Methods
- Majority - Requires >50% approval
- Plurality - Most votes wins (simple)
- Unanimous - All voters must agree
- Qualified Majority - Configurable threshold (e.g., 2/3)
- Ranked Choice - Ranked preferences with elimination
🔒 Enterprise Security
- Cryptographic Signatures - HMAC-based vote integrity verification
- Input Validation - XSS prevention and sanitization
- Audit Logging - Complete transparency and compliance trails
- Byzantine Fault Tolerance - Reputation-based detection and mitigation
- Replay Attack Prevention - Nonce-based security
🧠 Intelligent Consensus
- Semantic Interpretation - Natural language vote understanding
- Adaptive Strategies - Context-aware consensus mechanisms
- Deliberation Engine - Structured discussion and convergence analysis
- Smart Orchestration - Learning-based consensus optimization
🛡️ Safety & Quality
- Toxicity Detection - Harmful content identification
- Reasoning Quality - Evidence-based decision validation
- Factual Accuracy - Truth verification in agent responses
- Harm Prevention - Safety-critical decision safeguards
📊 Research & Evaluation
- Comprehensive Benchmarking - Performance comparison tools
- Quality Metrics - Decision accuracy and consensus satisfaction
- Scalability Testing - Multi-agent performance analysis
- Statistical Analysis - Rigorous evaluation frameworks
🏥 Safety-Critical Applications
- Medical Diagnosis - Multi-specialist consultations with safety guarantees
- Code Security Review - Vulnerability detection with expert consensus
- Architecture Decisions - High-stakes technical choices
- Content Moderation - Policy compliance with bias prevention
📨 Rich Message Types
- ProposalMessage - Structured proposals with options
- VoteMessage - Votes with reasoning and confidence scores
- VotingResultMessage - Comprehensive result summaries with analytics
🔄 Advanced State Management
- Persistent voting state across conversations
- Phase tracking (Proposal → Voting → Discussion → Consensus)
- Cryptographically signed audit trails with detailed logging
- Automatic result calculation and consensus detection
- Real-time Byzantine fault monitoring
🚀 Installation
pip install votingai
Both OpenAI and Anthropic (Claude) are included out of the box.
For development with additional tools:
pip install "votingai[dev]"
For development from source:
git clone https://github.com/tejas-dharani/votingai.git
cd votingai
pip install -e ".[dev]"
🏗️ Architecture
VotingAI is built with a modular architecture for enterprise-grade voting systems:
core- Fundamental voting protocols and base implementationsconsensus- Advanced consensus algorithms and deliberation strategiesintelligence- Semantic interpretation and natural language processingsecurity- Cryptographic integrity, audit, and Byzantine fault toleranceutilities- Configuration management and common utilitiesresearch- Benchmarking, evaluation, and experimental analysis
🎯 Quick Start
VotingAI supports both OpenAI and Anthropic (Claude) — swap providers with one line.
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.conditions import MaxMessageTermination
from votingai import BaseVotingGroupChat, VotingMethod, ModelProvider, create_model_client
async def main():
# OpenAI (uses OPENAI_API_KEY env var)
model_client = create_model_client(ModelProvider.OPENAI, model="gpt-4o")
# Anthropic / Claude (uses ANTHROPIC_API_KEY env var) — drop-in swap:
# model_client = create_model_client(ModelProvider.ANTHROPIC, model="claude-opus-4-6")
# Create voting agents
agents = [
AssistantAgent("Alice", model_client, system_message="Expert in backend systems"),
AssistantAgent("Bob", model_client, system_message="Frontend specialist"),
AssistantAgent("Carol", model_client, system_message="Security expert")
]
# Create voting team
voting_team = BaseVotingGroupChat(
participants=agents,
voting_method=VotingMethod.MAJORITY,
require_reasoning=True,
max_discussion_rounds=2,
termination_condition=MaxMessageTermination(20)
)
# Run voting process
result = await voting_team.run(task="""
Proposal: Should we migrate our API from REST to GraphQL?
Please vote APPROVE or REJECT with detailed reasoning.
""")
print(f"Decision: {result}")
asyncio.run(main())
📋 Use Cases
1. Code Review Voting 👨💻
Perfect for collaborative code reviews with multiple reviewers:
# Qualified majority voting for code reviews
voting_team = BaseVotingGroupChat(
participants=[senior_dev, security_expert, performance_engineer],
voting_method=VotingMethod.QUALIFIED_MAJORITY,
qualified_majority_threshold=0.67, # Require 2/3 approval
require_reasoning=True
)
task = """
Proposal: Approve merge of PR #1234 - "Add Redis caching layer"
Code changes implement memory caching to reduce database load.
Please review for: security, performance, maintainability.
Vote APPROVE or REJECT with detailed reasoning.
"""
2. Architecture Decisions 🏗️
Use ranked choice voting for complex architectural decisions:
# Ranked choice for architecture decisions
voting_team = BaseVotingGroupChat(
participants=[tech_lead, architect, devops_engineer],
voting_method=VotingMethod.RANKED_CHOICE,
max_discussion_rounds=3
)
task = """
Proposal: Choose microservices communication pattern
Options:
1. REST APIs with Service Mesh
2. Event-Driven with Message Queues
3. GraphQL Federation
4. gRPC with Load Balancing
Provide ranked preferences with reasoning.
"""
3. Content Moderation 🛡️
Majority voting for content approval/rejection:
# Simple majority for content moderation
voting_team = BaseVotingGroupChat(
participants=[community_manager, safety_specialist, legal_advisor],
voting_method=VotingMethod.MAJORITY,
allow_abstentions=True,
max_discussion_rounds=1
)
4. Feature Prioritization 📈
Unanimous consensus for high-stakes decisions:
# Unanimous voting for feature prioritization
voting_team = BaseVotingGroupChat(
participants=[product_manager, engineering_lead, ux_designer],
voting_method=VotingMethod.UNANIMOUS,
max_discussion_rounds=4
)
⚙️ Configuration Options
Voting Methods
from votingai import VotingMethod
VotingMethod.MAJORITY # >50% approval
VotingMethod.PLURALITY # Most votes wins
VotingMethod.UNANIMOUS # All voters must agree
VotingMethod.QUALIFIED_MAJORITY # Configurable threshold
VotingMethod.RANKED_CHOICE # Ranked preferences
Advanced Settings
BaseVotingGroupChat(
participants=agents,
voting_method=VotingMethod.QUALIFIED_MAJORITY,
qualified_majority_threshold=0.75, # 75% threshold
allow_abstentions=True, # Allow abstaining
require_reasoning=True, # Require vote reasoning
max_discussion_rounds=3, # Discussion before re-vote
auto_propose_speaker="lead_agent", # Auto-select proposer
max_turns=25, # Turn limit
emit_team_events=True # Enable event streaming
)
🔄 Voting Process Flow
1. PROPOSAL PHASE
├─ Agent presents structured proposal
├─ ProposalMessage with options and details
└─ Transition to voting phase
2. VOTING PHASE
├─ All eligible voters cast VoteMessage
├─ Reasoning and confidence tracking
├─ Real-time vote collection
└─ Check for completion/consensus
3. DISCUSSION PHASE (if no consensus)
├─ Open discussion among participants
├─ Limited rounds (configurable)
├─ Address concerns and questions
└─ Return to voting phase
4. CONSENSUS PHASE
├─ VotingResultMessage with summary
├─ Final decision and rationale
└─ Process completion
📊 Message Types
The extension provides structured message types for transparent voting:
ProposalMessage- Structured proposals with options and metadataVoteMessage- Votes with reasoning, confidence scores, and ranked choicesVotingResultMessage- Comprehensive results with participation analytics
🎯 Best Practices
Agent Design
- Give agents distinct expertise and perspectives
- Include clear voting instructions in system messages
- Design agents to provide reasoning for transparency
Proposal Structure
- Be specific about what's being decided
- Provide relevant context and constraints
- Include clear voting options when applicable
Voting Configuration
- Choose appropriate voting method for decision type
- Set reasonable discussion rounds (2-4 typical)
- Consider requiring reasoning for important decisions
📚 Examples
Check out the /examples directory for complete working examples:
- Basic Usage - Simple majority voting setup
- Code Review - Qualified majority for PR approval
- Architecture Decisions - Unanimous consensus for tech choices
- Content Moderation - Flexible moderation workflows
- Benchmark Examples - Performance comparison tools
- Scalability Testing - Multi-agent scalability analysis
Run examples:
# Basic examples
python examples/basic_example.py
# Benchmark comparisons
python examples/benchmark_example.py --example single
# Scalability testing
python examples/scalability_example.py --test basic
📊 Benchmarking
The extension includes comprehensive benchmarking tools to compare voting-based vs. standard group chat approaches:
# Run quick benchmark test (OpenAI, default)
python run_benchmarks.py --quick
# Run with Claude (Anthropic)
python run_benchmarks.py --quick --provider anthropic
# Run full benchmark suite
python run_benchmarks.py --full
python run_benchmarks.py --full --provider anthropic
# Run specific scenario types
python run_benchmarks.py --code-review
python run_benchmarks.py --architecture
python run_benchmarks.py --moderation
# Analyze results with visualizations
python benchmarks/analysis.py
Benchmark Metrics
The benchmark suite tracks:
- Efficiency: Time to decision, message count, token usage
- Quality: Decision success rate, consensus satisfaction
- Scalability: Performance with 3, 5, 10+ agents
- Robustness: Handling of edge cases and disagreements
Key Findings
Based on comprehensive benchmarking:
- Code Review: Voting reduces false positives by 23% vs. sequential review
- Architecture Decisions: Unanimous voting produces 31% higher satisfaction
- Content Moderation: Multi-agent voting achieves 89% accuracy vs. 76% single-agent
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🔗 Links
- PyPI Package: votingai
- GitHub Repository: votingai
- Issues & Support: GitHub Issues
Bringing democratic decision-making to multi-agent AI systems 🤖🗳️
📚 Academic Citations & References
When using this system in academic research, please cite:
@software{votingai,
title={VotingAI: Democratic Consensus System for Multi-Agent Teams},
author={[]},
year={2025},
url={https://github.com/tejas-dharani/votingai},
note={Enterprise-grade democratic consensus with Byzantine fault tolerance}
}
Metadata
Release files for votingai 1.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| votingai-1.0.3.tar.gz | 84.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| votingai-1.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 176.7 kB
Release files / votingai-1.0.3.tar.gz
| Download URL | votingai-1.0.3.tar.gz |
|---|---|
| Size | 84.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bc1d07c7e85f461e8dba64b20a039ae1d6b7c3a655bcd87fc650c21c03474aaf
|
|
BLAKE2b-256 checksum How to use checksums |
d899e0b971cd0d6079d2380f08fb2daff8b62b0cd0e20c2c484bc53e73f87593
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / votingai-1.0.3-py3-none-any.whl
| Download URL | votingai-1.0.3-py3-none-any.whl |
|---|---|
| Size | 91.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0c0e2d326a2250e09611ba881de3f6e0abf944ef7815c351e19570d493784f3f
|
|
BLAKE2b-256 checksum How to use checksums |
fce1dc3264e949723634f955ad82e6a1eac9ec842b87dc9edcbacf8d83abe7bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|