# VotingAI 🗳️
[](https://pypi.org/project/votingai/)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
**VotingAI: Democratic Multi-Agent Systems Built on AutoGen** - 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.
## ✨ Research-Grade Features
### 🗳️ 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 (NEW)
- **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
### ⚖️ Fairness & Ethics (NEW)
- **Demographic Parity** - Equal treatment across agent groups
- **Equalized Odds** - Fair outcomes for different agent types
- **Individual Fairness** - Consistent decisions for similar cases
- **Bias Detection** - Automated identification of discriminatory patterns
- **Voice Equality** - Balanced participation across all agents
### 🛡️ Safety Metrics (NEW)
- **Toxicity Detection** - Harmful content identification
- **Reasoning Quality** - Evidence-based decision validation
- **Factual Accuracy** - Truth verification in agent responses
- **Harm Prevention** - Safety-critical decision safeguards
### 📊 Statistical Rigor (NEW)
- **Bonferroni Correction** - Multiple comparison statistical validity
- **Effect Sizes** - Cohen's d and Hedge's g calculations
- **Bootstrap Confidence Intervals** - Robust statistical inference
- **Power Analysis** - Sample size validation (β = 0.8)
- **Calibration Metrics** - Expected Calibration Error (ECE)
### 🏥 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
```bash
# Install VotingAI (includes AutoGen dependencies)
pip install votingai
```
For development with additional tools:
```bash
pip install votingai[dev]
```
For development from source:
```bash
git clone https://github.com/tejas-dharani/votingai.git
cd votingai
pip install -e ".[dev]"
```
## 🎯 Quick Start
```python
import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.conditions import MaxMessageTermination
from votingai import VotingGroupChat, VotingMethod
async def main():
model_client = OpenAIChatCompletionClient(model="gpt-4o")
# 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 = VotingGroupChat(
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:
```python
# Qualified majority voting for code reviews
voting_team = VotingGroupChat(
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:
```python
# Ranked choice for architecture decisions
voting_team = VotingGroupChat(
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:
```python
# Simple majority for content moderation
voting_team = VotingGroupChat(
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:
```python
# Unanimous voting for feature prioritization
voting_team = VotingGroupChat(
participants=[product_manager, engineering_lead, ux_designer],
voting_method=VotingMethod.UNANIMOUS,
max_discussion_rounds=4
)
```
## ⚙️ Configuration Options
### Voting Methods
```python
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
```python
VotingGroupChat(
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:
```bash
# 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:
```bash
# Run quick benchmark test
python run_benchmarks.py --quick
# Run full benchmark suite
python run_benchmarks.py --full
# 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](LICENSE) file for details.
## 🔗 Links
- **PyPI Package**: [votingai](https://pypi.org/project/votingai/)
- **GitHub Repository**: [votingai](https://github.com/tejas-dharani/votingai)
- **Issues & Support**: [GitHub Issues](https://github.com/tejas-dharani/votingai/issues)
---
**Bringing democratic decision-making to multi-agent AI systems** 🤖🗳️
Raw data
{
"_id": null,
"home_page": null,
"name": "votingai",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "Tejas Dharani <tejas.dharani10@gmail.com>",
"keywords": "votingai, voting, multi-agent, consensus, ai, agents, democracy, autogen",
"author": null,
"author_email": "Tejas Dharani <tejas.dharani10@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/8d/86/c54370d31c74fafb7e04cea7f20a273a2c4389f2edfa8986be807cbd7c4d/votingai-1.0.2.tar.gz",
"platform": null,
"description": "# VotingAI \ud83d\uddf3\ufe0f\n\n[](https://pypi.org/project/votingai/)\n[](https://www.python.org/downloads/)\n[](https://opensource.org/licenses/MIT)\n\n**VotingAI: Democratic Multi-Agent Systems Built on AutoGen** - 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.\n\n## \u2728 Research-Grade Features\n\n### \ud83d\uddf3\ufe0f Democratic Voting Methods\n- **Majority** - Requires >50% approval\n- **Plurality** - Most votes wins (simple)\n- **Unanimous** - All voters must agree \n- **Qualified Majority** - Configurable threshold (e.g., 2/3)\n- **Ranked Choice** - Ranked preferences with elimination\n\n### \ud83d\udd12 Enterprise Security (NEW)\n- **Cryptographic Signatures** - HMAC-based vote integrity verification\n- **Input Validation** - XSS prevention and sanitization\n- **Audit Logging** - Complete transparency and compliance trails\n- **Byzantine Fault Tolerance** - Reputation-based detection and mitigation\n- **Replay Attack Prevention** - Nonce-based security\n\n### \u2696\ufe0f Fairness & Ethics (NEW)\n- **Demographic Parity** - Equal treatment across agent groups\n- **Equalized Odds** - Fair outcomes for different agent types\n- **Individual Fairness** - Consistent decisions for similar cases\n- **Bias Detection** - Automated identification of discriminatory patterns\n- **Voice Equality** - Balanced participation across all agents\n\n### \ud83d\udee1\ufe0f Safety Metrics (NEW)\n- **Toxicity Detection** - Harmful content identification\n- **Reasoning Quality** - Evidence-based decision validation\n- **Factual Accuracy** - Truth verification in agent responses\n- **Harm Prevention** - Safety-critical decision safeguards\n\n### \ud83d\udcca Statistical Rigor (NEW)\n- **Bonferroni Correction** - Multiple comparison statistical validity\n- **Effect Sizes** - Cohen's d and Hedge's g calculations\n- **Bootstrap Confidence Intervals** - Robust statistical inference\n- **Power Analysis** - Sample size validation (\u03b2 = 0.8)\n- **Calibration Metrics** - Expected Calibration Error (ECE)\n\n### \ud83c\udfe5 Safety-Critical Applications\n- **Medical Diagnosis** - Multi-specialist consultations with safety guarantees\n- **Code Security Review** - Vulnerability detection with expert consensus \n- **Architecture Decisions** - High-stakes technical choices\n- **Content Moderation** - Policy compliance with bias prevention\n\n### \ud83d\udce8 Rich Message Types\n- **ProposalMessage** - Structured proposals with options\n- **VoteMessage** - Votes with reasoning and confidence scores\n- **VotingResultMessage** - Comprehensive result summaries with analytics\n\n### \ud83d\udd04 Advanced State Management\n- **Persistent voting state** across conversations\n- **Phase tracking** (Proposal \u2192 Voting \u2192 Discussion \u2192 Consensus)\n- **Cryptographically signed audit trails** with detailed logging\n- **Automatic result calculation** and consensus detection\n- **Real-time Byzantine fault monitoring**\n\n## \ud83d\ude80 Installation\n\n```bash\n# Install VotingAI (includes AutoGen dependencies)\npip install votingai\n```\n\nFor development with additional tools:\n\n```bash\npip install votingai[dev]\n```\n\nFor development from source:\n\n```bash\ngit clone https://github.com/tejas-dharani/votingai.git\ncd votingai\npip install -e \".[dev]\"\n```\n\n## \ud83c\udfaf Quick Start\n\n```python\nimport asyncio\nfrom autogen_ext.models.openai import OpenAIChatCompletionClient\nfrom autogen_agentchat.agents import AssistantAgent\nfrom autogen_agentchat.conditions import MaxMessageTermination\n\nfrom votingai import VotingGroupChat, VotingMethod\n\nasync def main():\n model_client = OpenAIChatCompletionClient(model=\"gpt-4o\")\n \n # Create voting agents\n agents = [\n AssistantAgent(\"Alice\", model_client, system_message=\"Expert in backend systems\"),\n AssistantAgent(\"Bob\", model_client, system_message=\"Frontend specialist\"), \n AssistantAgent(\"Carol\", model_client, system_message=\"Security expert\")\n ]\n \n # Create voting team\n voting_team = VotingGroupChat(\n participants=agents,\n voting_method=VotingMethod.MAJORITY,\n require_reasoning=True,\n max_discussion_rounds=2,\n termination_condition=MaxMessageTermination(20)\n )\n \n # Run voting process\n result = await voting_team.run(task=\"\"\"\n Proposal: Should we migrate our API from REST to GraphQL?\n \n Please vote APPROVE or REJECT with detailed reasoning.\n \"\"\")\n \n print(f\"Decision: {result}\")\n\nasyncio.run(main())\n```\n\n## \ud83d\udccb Use Cases\n\n### 1. Code Review Voting \ud83d\udc68\u200d\ud83d\udcbb\n\nPerfect for collaborative code reviews with multiple reviewers:\n\n```python\n# Qualified majority voting for code reviews\nvoting_team = VotingGroupChat(\n participants=[senior_dev, security_expert, performance_engineer],\n voting_method=VotingMethod.QUALIFIED_MAJORITY,\n qualified_majority_threshold=0.67, # Require 2/3 approval\n require_reasoning=True\n)\n\ntask = \"\"\"\nProposal: Approve merge of PR #1234 - \"Add Redis caching layer\"\n\nCode changes implement memory caching to reduce database load.\nPlease review for: security, performance, maintainability.\n\nVote APPROVE or REJECT with detailed reasoning.\n\"\"\"\n```\n\n### 2. Architecture Decisions \ud83c\udfd7\ufe0f\n\nUse ranked choice voting for complex architectural decisions:\n\n```python\n# Ranked choice for architecture decisions\nvoting_team = VotingGroupChat(\n participants=[tech_lead, architect, devops_engineer],\n voting_method=VotingMethod.RANKED_CHOICE,\n max_discussion_rounds=3\n)\n\ntask = \"\"\"\nProposal: Choose microservices communication pattern\n\nOptions:\n1. REST APIs with Service Mesh\n2. Event-Driven with Message Queues \n3. GraphQL Federation\n4. gRPC with Load Balancing\n\nProvide ranked preferences with reasoning.\n\"\"\"\n```\n\n### 3. Content Moderation \ud83d\udee1\ufe0f\n\nMajority voting for content approval/rejection:\n\n```python\n# Simple majority for content moderation\nvoting_team = VotingGroupChat(\n participants=[community_manager, safety_specialist, legal_advisor],\n voting_method=VotingMethod.MAJORITY,\n allow_abstentions=True,\n max_discussion_rounds=1\n)\n```\n\n### 4. Feature Prioritization \ud83d\udcc8\n\nUnanimous consensus for high-stakes decisions:\n\n```python\n# Unanimous voting for feature prioritization\nvoting_team = VotingGroupChat(\n participants=[product_manager, engineering_lead, ux_designer],\n voting_method=VotingMethod.UNANIMOUS,\n max_discussion_rounds=4\n)\n```\n\n## \u2699\ufe0f Configuration Options\n\n### Voting Methods\n\n```python\nfrom votingai import VotingMethod\n\nVotingMethod.MAJORITY # >50% approval\nVotingMethod.PLURALITY # Most votes wins\nVotingMethod.UNANIMOUS # All voters must agree\nVotingMethod.QUALIFIED_MAJORITY # Configurable threshold\nVotingMethod.RANKED_CHOICE # Ranked preferences\n```\n\n### Advanced Settings\n\n```python\nVotingGroupChat(\n participants=agents,\n voting_method=VotingMethod.QUALIFIED_MAJORITY,\n qualified_majority_threshold=0.75, # 75% threshold\n allow_abstentions=True, # Allow abstaining\n require_reasoning=True, # Require vote reasoning\n max_discussion_rounds=3, # Discussion before re-vote\n auto_propose_speaker=\"lead_agent\", # Auto-select proposer\n max_turns=25, # Turn limit\n emit_team_events=True # Enable event streaming\n)\n```\n\n## \ud83d\udd04 Voting Process Flow\n\n```\n1. PROPOSAL PHASE\n \u251c\u2500 Agent presents structured proposal\n \u251c\u2500 ProposalMessage with options and details\n \u2514\u2500 Transition to voting phase\n\n2. VOTING PHASE \n \u251c\u2500 All eligible voters cast VoteMessage\n \u251c\u2500 Reasoning and confidence tracking\n \u251c\u2500 Real-time vote collection\n \u2514\u2500 Check for completion/consensus\n\n3. DISCUSSION PHASE (if no consensus)\n \u251c\u2500 Open discussion among participants\n \u251c\u2500 Limited rounds (configurable)\n \u251c\u2500 Address concerns and questions\n \u2514\u2500 Return to voting phase\n\n4. CONSENSUS PHASE\n \u251c\u2500 VotingResultMessage with summary\n \u251c\u2500 Final decision and rationale\n \u2514\u2500 Process completion\n```\n\n## \ud83d\udcca Message Types\n\nThe extension provides structured message types for transparent voting:\n\n- **`ProposalMessage`** - Structured proposals with options and metadata\n- **`VoteMessage`** - Votes with reasoning, confidence scores, and ranked choices \n- **`VotingResultMessage`** - Comprehensive results with participation analytics\n\n## \ud83c\udfaf Best Practices\n\n### Agent Design\n- Give agents distinct expertise and perspectives\n- Include clear voting instructions in system messages\n- Design agents to provide reasoning for transparency\n\n### Proposal Structure \n- Be specific about what's being decided\n- Provide relevant context and constraints\n- Include clear voting options when applicable\n\n### Voting Configuration\n- Choose appropriate voting method for decision type\n- Set reasonable discussion rounds (2-4 typical)\n- Consider requiring reasoning for important decisions\n\n## \ud83d\udcda Examples\n\nCheck out the `/examples` directory for complete working examples:\n\n- **Basic Usage** - Simple majority voting setup \n- **Code Review** - Qualified majority for PR approval\n- **Architecture Decisions** - Unanimous consensus for tech choices\n- **Content Moderation** - Flexible moderation workflows\n- **Benchmark Examples** - Performance comparison tools\n- **Scalability Testing** - Multi-agent scalability analysis\n\nRun examples:\n\n```bash\n# Basic examples\npython examples/basic_example.py\n\n# Benchmark comparisons\npython examples/benchmark_example.py --example single\n\n# Scalability testing \npython examples/scalability_example.py --test basic\n```\n\n## \ud83d\udcca Benchmarking\n\nThe extension includes comprehensive benchmarking tools to compare voting-based vs. standard group chat approaches:\n\n```bash\n# Run quick benchmark test\npython run_benchmarks.py --quick\n\n# Run full benchmark suite\npython run_benchmarks.py --full\n\n# Run specific scenario types\npython run_benchmarks.py --code-review\npython run_benchmarks.py --architecture\npython run_benchmarks.py --moderation\n\n# Analyze results with visualizations\npython benchmarks/analysis.py\n```\n\n### Benchmark Metrics\n\nThe benchmark suite tracks:\n\n- **Efficiency**: Time to decision, message count, token usage\n- **Quality**: Decision success rate, consensus satisfaction \n- **Scalability**: Performance with 3, 5, 10+ agents\n- **Robustness**: Handling of edge cases and disagreements\n\n### Key Findings\n\nBased on comprehensive benchmarking:\n\n- **Code Review**: Voting reduces false positives by 23% vs. sequential review\n- **Architecture Decisions**: Unanimous voting produces 31% higher satisfaction\n- **Content Moderation**: Multi-agent voting achieves 89% accuracy vs. 76% single-agent\n\n## \ud83e\udd1d Contributing\n\nContributions 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.\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\udd17 Links\n\n- **PyPI Package**: [votingai](https://pypi.org/project/votingai/)\n- **GitHub Repository**: [votingai](https://github.com/tejas-dharani/votingai)\n- **Issues & Support**: [GitHub Issues](https://github.com/tejas-dharani/votingai/issues)\n\n---\n\n**Bringing democratic decision-making to multi-agent AI systems** \ud83e\udd16\ud83d\uddf3\ufe0f\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "VotingAI: Democratic Multi-Agent Systems Built on AutoGen",
"version": "1.0.2",
"project_urls": {
"Changelog": "https://github.com/tejas-dharani/votingai/blob/main/CHANGELOG.md",
"Homepage": "https://github.com/tejas-dharani/votingai",
"Issues": "https://github.com/tejas-dharani/votingai/issues",
"Repository": "https://github.com/tejas-dharani/votingai.git"
},
"split_keywords": [
"votingai",
" voting",
" multi-agent",
" consensus",
" ai",
" agents",
" democracy",
" autogen"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d3af94bc54d22b8a0ac8ae3898abbf29f219c6078515b8f36ddf874147eec8fd",
"md5": "cc3b3f4176d0736386c08f1df04aa049",
"sha256": "b07400d41321c9fd5160e2e5fce6b1f481d58b7ce504993ae0102627e948e5a6"
},
"downloads": -1,
"filename": "votingai-1.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cc3b3f4176d0736386c08f1df04aa049",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 25459,
"upload_time": "2025-08-18T13:33:28",
"upload_time_iso_8601": "2025-08-18T13:33:28.730833Z",
"url": "https://files.pythonhosted.org/packages/d3/af/94bc54d22b8a0ac8ae3898abbf29f219c6078515b8f36ddf874147eec8fd/votingai-1.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8d86c54370d31c74fafb7e04cea7f20a273a2c4389f2edfa8986be807cbd7c4d",
"md5": "60ec2c5efd05ee85317b18445e088fed",
"sha256": "335428152b80f10f105fb37f9790d382fb08689908628604372fa3f393ee0f57"
},
"downloads": -1,
"filename": "votingai-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "60ec2c5efd05ee85317b18445e088fed",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 54749,
"upload_time": "2025-08-18T13:33:30",
"upload_time_iso_8601": "2025-08-18T13:33:30.376819Z",
"url": "https://files.pythonhosted.org/packages/8d/86/c54370d31c74fafb7e04cea7f20a273a2c4389f2edfa8986be807cbd7c4d/votingai-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-18 13:33:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tejas-dharani",
"github_project": "votingai",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "votingai"
}