π Project Structure | π Getting Started | π§ Usage | π§ Methods | π― Evaluation
This repository contains the official implementation, baselines, and evaluation pipeline for our paper "Creative Generation via Multi-Agent Debate: Does Debate Suppress Diversity?", published as a Main Conference paper at EMNLP 2026 (Oral), covering four creative benchmarks: LiveIdeaBench (scientific ideation), ArgumentAnnotatedEssays (argumentative writing), MacGyver (creative problem-solving), and Arena Hard v2.0 (open-ended creative writing).
Creative-MAD is a diversity-preserving multi-agent debate framework for creative generation tasks. Standard Multi-Agent Debate (MAD) improves output quality but suppresses output diversity across independent runs, since the same convergence dynamics that drive quality gains also homogenize agents. Creative-MAD counters this with two complementary mechanisms that sustain agent divergence within each debate session, preserving MAD's quality gains while substantially improving cross-run diversity.
βββ datasets/ # Dataset builders and processed JSON files
βββ methods/ # Method implementations
β βββ mad_base/ # Shared base class with config loading and LLM orchestration
β βββ cw_regenerate/ # Baseline: N independent regenerations (Direct)
β βββ cw_cot/ # Chain-of-Thought baseline
β βββ cw_self_refine/ # Self-Refine: iterative single-agent refinement
β βββ cw_som/ # Voting: N agents independently propose β LLM judge selects best
β βββ cw_mad/ # Homo MAD: standard homogeneous multi-round debate
β βββ cw_mad_heto_persona/ # Hetero MAD: MAD with heterogeneous domain personas
β βββ cw_mad_cognitive/ # Creative-MAD: CLA + EPS (proposed)
βββ benchmark/
β βββ instance_level/ # LLM-as-a-Judge rubric scoring & pairwise ranking
β βββ set_level/ # Vendi Score (semantic), Div-BLEU (lexical)
βββ model_api_configs/ # API endpoint configurations
βββ local_api_server/ # Example configs for local model deployment (vLLM)
βββ scripts/ # Shell scripts for batch inference runs
βββ utils/ # Shared utilities
βββ inference.py # Entry point for running experiments
βββ requirements.txt # Python dependencies
conda create -n creative-mad python=3.10.18 -y
conda activate creative-mad
pip install -r requirements.txtpython datasets/build_test_dataset.py --dataset_name <dataset_name>
# Supported datasets
python datasets/build_test_dataset.py --dataset_name LiveIdea
python datasets/build_test_dataset.py --dataset_name ArgumentAnnotatedEssays
python datasets/build_test_dataset.py --dataset_name MacGyver
python datasets/build_test_dataset.py --dataset_name ArenaHardEach builder normalizes formatting and produces datasets/data/<dataset>.json. Datasets requiring external source files (e.g., .xlsx, .jsonl) should be placed in the working directory before running the script.
The framework interacts with models through an OpenAI-compatible interface.
-
Configure API endpoints in
model_api_configs/model_api_config.json. Each entry specifies the model name, base URL, API key, and maximum concurrent workers. -
Deploy local models (optional) using vLLM:
bash local_api_server/run_vllm.sh
Then register the endpoint in
model_api_config.json.
python inference.py --method_name cw_mad_cognitive --debugpython inference.py \
--model_name <model_name> \
--method_name <method_name> \
--test_dataset_name <dataset_name> \
--num_test_samples 300 \
--word_limit \
[--method_config_name config_main] \
[--sequential]| Argument | Description |
|---|---|
--model_name |
Must match a key in model_api_config.json |
--method_name |
One of the methods listed in Methods |
--test_dataset_name |
One of: LiveIdea, ArgumentAnnotatedEssays, MacGyver, ArenaHard |
--word_limit |
Append per-dataset word count constraints to queries |
--method_config_name |
Optional YAML config under methods/<method>/configs/ |
--sequential |
Force single-threaded evaluation (default: parallel) |
--num_test_samples |
Limit the number of test samples |
Outputs are written to results/<dataset>/<model>/ as JSONL traces (per-sample) and a _stats.json summary.
bash scripts/run_creativity.sh| Method | Paper name | Description |
|---|---|---|
cw_regenerate |
Direct | N independent single-agent responses |
cw_cot |
β | Chain-of-Thought: brief brainstorm β final answer, repeated N times |
cw_self_refine |
Self-Refine | Single-agent iterative refinement over R steps |
cw_som |
Voting | N agents independently propose β LLM judge selects best (no debate) |
cw_mad |
Homo MAD | Standard homogeneous MAD: N agents Γ R debate rounds β judge |
cw_mad_heto_persona |
Hetero MAD | MAD with heterogeneous domain personas (Economist, Psychologist, Lawyer, Doctor, Historian) |
cw_mad_cognitive |
Creative-MAD | MAD with Cognitive Lens Assignment + EPS peer filtering (proposed) |
All multi-generation methods run num_generations independent sessions to support set-level diversity evaluation. The paper uses N=5 agents, R=2 debate rounds, temperature=1.0, and k=2 for EPS.
Rubric-based absolute score (1β10 per dimension, dimensions defined per dataset):
python benchmark/instance_level/practical_ingenuity_scorer.py \
--input results/<dataset>/<model>/<method>_infer.jsonl \
--output results/<dataset>/<model>/evaluation/instance_level/<method>_infer_scored.jsonl \
--dataset <dataset_name> \
--api-key YOUR_API_KEY \
--model <judge_model> \
--num-gens 1python benchmark/instance_level/sum_practical_ingenuity.pyPairwise win rate (head-to-head comparison across methods, position-swapped to mitigate bias):
python benchmark/instance_level/pairwise_scorer.py \
--input-dir results/<dataset>/<model>/ \
--output results/<dataset>/<model>/evaluation/instance_level/pairwise_results.jsonl \
--dataset <dataset_name> \
--api-key YOUR_API_KEY \
--model <judge_model>python benchmark/instance_level/sum_pairwise.pySemantic diversity (Vendi Score) and lexical diversity (Div-BLEU = 1 β Self-BLEU) across G=5 generations per query:
python benchmark/set_level/diversity_scorer.py \
--input results/<dataset>/<model>/<method>_infer.jsonl \
--output results/<dataset>/<model>/evaluation/set_level/<method>_infer_diversity.jsonl \
--num-generations 5python benchmark/set_level/lexical_diversity_scorer.py \
--input results/<dataset>/<model>/<method>_infer.jsonl \
--output results/<dataset>/<model>/evaluation/set_level/<method>_infer_lexical.jsonl \
--method self_bleuAggregate results:
python benchmark/set_level/sum_diversity.py
python benchmark/set_level/sum_lexical_diversity.py- Create a new directory under
methods/(e.g.,methods/my_method/). - Subclass
methods.mad_base.MADto inherit configuration loading, model orchestration, and token tracking. - Register the method name in
methods/__init__.py. - Provide a default config in
methods/my_method/configs/config_main.yaml.
If you use Creative-MAD in your research, please cite our preprint:
@article{nguyen2026creative,
title={Creative Generation via Multi-Agent Debate: Does Debate Suppress Diversity?},
author={Nguyen, Tien Anh and Nguyen, Khanh-Binh and Do, Van Dai and Venkatesh, Svetha and Le, Hung},
journal={arXiv preprint arXiv:2609.00683},
year={2026}
}arXiv preprint: https://arxiv.org/abs/2609.00683