plurals

Plurals: A System for Guiding LLMs Via Simulated Social Ensembles

https://github.com/josh-ashkinaze/plurals

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 5 DOI reference(s) in README
  • Academic publication links
    Links to: arxiv.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (12.4%) to scientific vocabulary

Keywords

artificial-intelligence democracy democracy-enhancing-technologies ethics-in-ai lllm multi-agent-system pluralism
Last synced: 6 months ago · JSON representation ·

Repository

Plurals: A System for Guiding LLMs Via Simulated Social Ensembles

Basic Info
Statistics
  • Stars: 24
  • Watchers: 1
  • Forks: 2
  • Open Issues: 3
  • Releases: 60
Topics
artificial-intelligence democracy democracy-enhancing-technologies ethics-in-ai lllm multi-agent-system pluralism
Created almost 2 years ago · Last pushed 8 months ago
Metadata Files
Readme Citation

README.md

Plurals: A System for Guiding LLMs Via Simulated Social Ensembles

Package Stats 📊

PyPI - Downloads GitHub last commit GitHub Created At

Package Build (Tests/Doc Creation/PyPi Releases) 👌

Build Push to pypy PyPI

Paper 📜 (Click here!)

Documentation 📋 (Click here!)

Cite ℹ️

If you use Plurals in your research, please cite the following paper appearing at CHI 25 (Honorable Mention):

Bibtex: @inproceedings{ashkinaze2025plurals, author = {Ashkinaze, Joshua and Fry, Emily and Edara, Narendra and Gilbert, Eric and Budak, Ceren}, title = {Plurals: A System for Guiding LLMs Via Simulated Social Ensembles}, booktitle = {CHI Conference on Human Factors in Computing Systems}, series = {CHI '25}, year = {2025}, month = may, location = {Yokohama, Japan}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, pages = {1--27}, numpages = {27}, doi = {10.1145/3706598.3713675}, url = {https://doi.org/10.1145/3706598.3713675} }

APA: Ashkinaze, J., Fry, E., Edara, N., Gilbert, E., & Budak, C. (2025). Plurals: A system for guiding LLMs via simulated social ensembles. In CHI Conference on Human Factors in Computing Systems (CHI '25, pp. 1-27). Association for Computing Machinery. https://doi.org/10.1145/3706598.3713675

Overview 🌌

System Diagram

Plurals is an end-to-end generator of simulated social ensembles. (1) Agents complete tasks within (2) Structures, with communication optionally summarized by (3) Moderators. Plurals integrates with government datasets (1a) and templates, some inspired by democratic deliberation theory (1b).

The building block is Agents, which are large language models (LLMs) that have system instructions and tasks. System instructions can be generated from user input, government datasets (American National Election Studies; ANES), or persona templates. Agents exist within Structures, which define what information is shared. Combination instructions tell Agents how to combine the responses of other Agents when deliberating in the Structure. Users can customize an Agent's combination instructions or use existing templates drawn from deliberation literature and beyond. Moderators aggregate responses from multi-agent deliberation.

Plurals includes support for multiple information-sharing structures (e.g., chains, graphs, debates, ensembles) and templates for customizing LLM deliberation within these.

Detailed Documentation 📋

https://josh-ashkinaze.github.io/plurals/

Quick Start ⚡

Installation

markddown pip install plurals

Set environment variables

```python

import os os.environ["OPENAIAPIKEY"] = 'youropenaikey' os.environ["ANTHROPICAPIKEY"] = 'youranthropickey' ```

Create a nationally representative ensemble of Agents portrayed by different LLMs

```python from plurals.agent import Agent from plurals.deliberation import Ensemble, Moderator

task = "What, specifically, would make commuting on a bike more appealing to you? Answer from your perspective. Be specific. You are in a focus group." agents = [Agent(persona='random', model='gpt-4o') for _ in range(20)] ensemble = Ensemble(agents=agents, task=task) ensemble.process() for r in ensemble.responses: print(r)

```

Create a directed acyclic graph of Agents for story development

System Diagram

```python from plurals.agent import Agent from plurals.deliberation import Graph, Moderator

story_prompt = """ Craft a mystery story set in 1920s Paris. The story should revolve around the theft of a famous artwork from the Louvre. """

agents = { 'plot': Agent( systeminstructions="You are a bestselling author specializing in mystery plots", model="gpt-4", combinationinstructions="Develop the plot based on character and setting inputs: ${previousresponses}" ), 'character': Agent( systeminstructions="You are a character development expert with a background in psychology", model="gpt-4", combinationinstructions="Create compelling characters that fit the plot and setting: ${previousresponses}" ), 'setting': Agent( systeminstructions="You are a world-building expert with a focus on historical accuracy", model="gpt-4", combinationinstructions="Design a rich, historically accurate setting that enhances the plot: ${previous_responses}" ) }

Create a creative writing moderator

moderator = Moderator( persona="an experienced editor specializing in mystery novels", model="gpt-4", combinationinstructions="Synthesize the plot, character, and setting elements into a cohesive story outline: ${previousresponses}" )

Define edges to create a simple interaction pattern

edges = [ ('setting', 'character'), ('setting', 'plot'), ('character', 'plot') ]

Create the DAG structure

storydag = Graph( agents=agents, edges=edges, task=storyprompt, moderator=moderator )

Process the DAG

story_dag.process()

Print the final story outline

print(storydag.finalresponse)

```

Issues and Features 📝

Plurals is run by a small and energetic team of academics doing the best they can [1]. To report bugs or feature requests, open a GitHub issue. We strongly encourage you to use our Bug or Feature Request issue templates; these make it easy for us to respond effectively to the issue.

[1] Language adopted from (https://github.com/davidjurgens/potato).

Some Potential Uses 🔨🔭🔦✂️

  • Persona-based experiments (Ex: Create a panel of nationally representative personas)

  • Deliberation structure experiments (What are optimal information-sharing structures?)

  • Deliberation instruction experiments (What are optimal instructions for combining information?)

  • Agent-based models (Ex: understanding contagion in AI networks)

  • Curation (Ex: To what extent can Moderator LLMs filter and select the best outputs from other LLMs?)

  • Steerable guardrails (Ex: Can LLM deliberation steer abstentions?)

  • Persuasive messaging (Use many LLMs to collaboratively brainstorm and refine persuasive messaging for different audiences; Experiment with simulated focus groups)

  • Viewpoint augmentation (Provide varied perspectives and information from multiple agents)

  • Creative ideation (e.g., get ideas from multiple LLMs with different perspectives/roles for hypothesis generation, creative ideas, or product design)

Collaborators 🤝

If you are interested in collaborating, please reach out to Joshua Ashkinaze (jashkina@umich.edu). We are actively running both human and AI experiments around (1) how and when simulated social ensembles augment humans; (2) using Plurals for moderation.

Updates 🆕

  • Paper to appear at CHI 2025!

Owner

  • Name: Joshua Ashkinaze
  • Login: josh-ashkinaze
  • Kind: user
  • Location: New York City

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
  - family-names: Ashkinaze
    given-names: Joshua
  - family-names: Fry
    given-names: Emily
  - family-names: Edara
    given-names: Narendra
  - family-names: Gilbert
    given-names: Eric
  - family-names: Budak
    given-names: Ceren
title: "Plurals: A System for Guiding LLMs Via Simulated Social Ensembles"
type: software
url: "http://arxiv.org/abs/2409.17213"
date-released: 2024-09-27

preferred-citation:
  type: article
  authors:
    - family-names: Ashkinaze
      given-names: Joshua
    - family-names: Fry
      given-names: Emily
    - family-names: Edara
      given-names: Narendra
    - family-names: Gilbert
      given-names: Eric
    - family-names: Budak
      given-names: Ceren
  doi: "10.48550/arXiv.2409.17213"
  journal: "arXiv"
  month: 9
  title: "Plurals: A System for Guiding LLMs Via Simulated Social Ensembles"
  year: 2024
  url: "http://arxiv.org/abs/2409.17213"

GitHub Events

Total
  • Create event: 13
  • Release event: 7
  • Issues event: 7
  • Watch event: 16
  • Member event: 1
  • Issue comment event: 4
  • Push event: 42
  • Pull request review event: 1
  • Pull request event: 16
Last Year
  • Create event: 13
  • Release event: 7
  • Issues event: 7
  • Watch event: 16
  • Member event: 1
  • Issue comment event: 4
  • Push event: 42
  • Pull request review event: 1
  • Pull request event: 16

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 2
  • Total pull requests: 5
  • Average time to close issues: about 2 months
  • Average time to close pull requests: 19 minutes
  • Total issue authors: 2
  • Total pull request authors: 2
  • Average comments per issue: 1.5
  • Average comments per pull request: 0.0
  • Merged pull requests: 3
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 2
  • Pull requests: 5
  • Average time to close issues: about 2 months
  • Average time to close pull requests: 19 minutes
  • Issue authors: 2
  • Pull request authors: 2
  • Average comments per issue: 1.5
  • Average comments per pull request: 0.0
  • Merged pull requests: 3
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • josh-ashkinaze (41)
  • dongdongzhaoUP (1)
Pull Request Authors
  • josh-ashkinaze (10)
  • cogitoergo-sum (3)
  • Shreyas3303 (1)
Top Labels
Issue Labels
enhancement (19) p0 (10) documentation (7) p1 (6) p2 (5) bug (3) refactor (2)
Pull Request Labels
enhancement (2) p0 (1) p1 (1)

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 105 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 46
  • Total maintainers: 1
pypi.org: plurals

A package for simulated social ensembles.

  • Versions: 46
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 105 Last month
Rankings
Dependent packages count: 10.7%
Forks count: 25.1%
Average: 34.5%
Stargazers count: 42.2%
Dependent repos count: 60.1%
Maintainers (1)
Last synced: 6 months ago