Skip to main content

WhoWins

WhoWins: position, role or label? Five seats send five casings of one key, and the tool result wins

PyPI Python 3.10+ License: Apache-2.0 Website

Position, Role or Label? A Controlled Study of Instruction Conflicts in LLM Agents

An LLM agent takes instructions from the operator's system prompt, the repository's configuration, the user, tool results and its own saved notes, and these often disagree. A source sets three things at once: the instruction's position, the chat role that carries it and the label that names it. WhoWins keeps each instruction's text fixed and changes only how it is delivered. It has 1,080 scenarios in five task types, each with up to five instructions that no reply can satisfy together, sent from five seats, and seven experiments that each change one thing. Code scores which instruction a reply followed; no LLM judge is used. The paper runs it on 14 open-weight models, 1,887,356 scored replies in all.

Install

pip install whowins

Python 3.10 or newer; nothing outside the standard library. The package carries the scenarios and the run configs, so it works without a checkout. The tests, the GPU scripts and the docs are in the repository.

Quick start

python -m whowins.validation.validate_collection    # counts, family rules, the worked trials
python -m whowins.checkers.coverage                 # every scenario has a working checker
python -m whowins.splits.check                      # the frozen held-out lists still match the data
python -m whowins.runner.design main-ladder-qwen3-8b-nothink   # what a Ladder run sends

Build the paper's Box 1, a trial in which every seat asks for a different casing, and score a reply:

from whowins.checkers import Response, ToolCall, check
from whowins.runner.design import trials_for_run
from whowins.runner.rendering import render_dicts
from whowins.runner.serving import load_run
from whowins.runner.trials import load_scenarios

scenarios = load_scenarios()                     # every base scenario, by id
run = load_run("main-ladder-qwen3-8b-nothink")   # a run config the package carries
trials = trials_for_run(run, scenarios)          # every trial this run sends, in order
box1 = next(t for t in trials if t.trial_id == "fmt-0002@S1-S2-S3-S4-S5")
for m in render_dicts(box1, scenarios):          # the messages the model receives
    print(m["role"], repr(m["content"]), *(m[k] for k in ("tool_calls", "tool_call_id") if k in m))

reply = Response(text='{"ACCOUNT_ID": "acc_1042", "OWNER_NAME": "Ada"}')
print(check(scenarios["fmt-0002"], reply).winning_option)          # o5: the tool result's option
print(check(scenarios["tool-0001"], Response(tool_calls=[ToolCall("check_types")])).winning_option)  # o2

Logs and run records go to logs/ and results/ under the working directory.

Citation

@misc{laddha2026whowins,
  title  = {Position, Role or Label? A Controlled Study of Instruction Conflicts in LLM Agents},
  author = {Anish Laddha and Nitesh Pradhan and Gaurav Srivastava},
  year   = {2026},
  url    = {https://github.com/anishh15/WhoWins}
}

Apache License 2.0. Contact: anshladdha15@gmail.com, nitesh.pradhan@lnmiit.ac.in, gks@vt.edu.

Metadata

Release files for whowins 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for whowins 0.1.0
File Size Uploaded Provenance
whowins-0.1.0.tar.gz 689.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for whowins 0.1.0
File Interpreter ABI Platform
whowins-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.6 MB

Release files / whowins-0.1.0.tar.gz

Download URL whowins-0.1.0.tar.gz
Size 689.8 kB
Tags Source
SHA-256 checksum
How to use checksums
f770e22a4ef5b3813d9c0f4c6e478b4dc20c1fe4c734db182ddf24d6511d5af4
BLAKE2b-256 checksum
How to use checksums
61a2c49e69e320fdfd681bf034b34a0014af86837667eb51a97a3040815822ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Release files / whowins-0.1.0-py3-none-any.whl

Download URL whowins-0.1.0-py3-none-any.whl
Size 956.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d6d7369f9d9583219a2a7c0f8b77ec7e3d0680cdccfdeadaeba3cf30af5d305d
BLAKE2b-256 checksum
How to use checksums
2b29f62fa09f44d2275bbe56ec1daa521b575152c26d6f7e5eafbbd75d580301
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Security for whowins 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for whowins-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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