Skip to main content

VotingAI 🗳️

PyPI version Python 3.10+ License: MIT

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 implementations
  • consensus - Advanced consensus algorithms and deliberation strategies
  • intelligence - Semantic interpretation and natural language processing
  • security - Cryptographic integrity, audit, and Byzantine fault tolerance
  • utilities - Configuration management and common utilities
  • research - 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 metadata
  • VoteMessage - Votes with reasoning, confidence scores, and ranked choices
  • VotingResultMessage - 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


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)

Source distribution for votingai 1.0.3
File Size Uploaded
votingai-1.0.3.tar.gz 84.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for votingai 1.0.3
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.0.3 This release

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page