Skip to main content

refereed

Multi-perspective review of research papers. Several reviewers read the paper independently, then a synthesiser combines their reports into one recommendation.

There are two panels. Both run through the same engine, so code written against one works against the other.

Open panel Hosted panel
Reviewers 3 (claims, method, clarity) 7 narrow reviewers
Weights Equal Per-reviewer, calibrated
Calibration None Tuned against a corpus of ~105 papers
Runs on Your machine Quilio infrastructure
Model key Yours Included
Account None Quilio API key
Licence MIT Commercial

Install

pip install "refereed[anthropic]"

Python 3.9 or later. The engine and the open panel have no third-party dependencies; the anthropic extra is only needed to run the open panel against Claude.

Open panel

Runs locally against your own model key. No account, no rate limit.

export ANTHROPIC_API_KEY=...
refereed review paper.md
refereed reviewers            # list the panel, no API call
import asyncio
from refereed import anthropic_complete, review_paper

review = asyncio.run(review_paper(
    open("paper.md").read(),
    anthropic_complete(effort="high"),
    title="Paper title",
))

review.weighted_score
[r for r in review.reports if r.ok]
review.meta["revision_list"]

Hosted panel

Seven narrow reviewers with calibrated weights and a separate synthesiser. Requires a Quilio API key: https://quilio.dev/pricing

export QUILIO_API_KEY=qk_...
refereed review paper.md --hosted
from refereed import review

r = review(open("paper.md").read(), api_key="qk_...")
r.weighted_score
r.recommendation
r.major_concerns          # each tagged with the reviewer that raised it

QuotaExceeded is raised when the period's quota is spent. ReviewError covers transport and API failures.

Scoring

weighted_score is the weight-weighted mean of reviewer scores over reviewers that returned parseable output:

sum(weight_i * score_i) / sum(weight_i)

It is computed from the returned JSON and is reproducible from it. In the open panel the weights are equal, so this reduces to a plain mean.

Failure semantics

  • A reviewer that raises, or returns output with no JSON object, is recorded with ok=False and an error string. The other reviewers still run.
  • weighted_score is computed over successful reviewers only.
  • Unparseable output is kept in ReviewerReport.raw, truncated to 2000 characters.
  • The synthesiser runs only if at least one reviewer succeeded. A failure there sets meta_error and leaves the reports intact.
  • extract_json accepts a bare object, a fenced block, or an object embedded in prose. It rejects a top-level array.

Bring your own backend

Model access goes through one callable, async (system, user) -> str. Nothing else in the open panel performs I/O.

async def complete(system: str, user: str) -> str:
    return await gateway.complete(system=system, user=user)

review = await review_paper(paper, complete)

The hosted client takes an injectable transport for the same reason.

Limits

  • Assessment is bounded by the model's knowledge. It does not perform a literature search, so treat any novelty claim as a prompt to go and check.
  • It reads the text you supply. It cannot run experiments or inspect data it has not been given.
  • Output is non-deterministic. Two runs on the same paper differ in wording and may differ in score.
  • Scores are ordinal. The concerns and the revision list carry the detail.
  • Output is model-generated. It is a reading aid before submission and carries no editorial standing.
  • citeverify: checks whether the references in a bibliography exist, against OpenAlex, Crossref and arXiv.
  • corpus-lens: keywords, rhetorical fingerprints, similarity and embeddings across a whole corpus.

citeverify output can be passed to either panel with --context.

Development

pip install -e ".[dev]"
pytest

40 tests, all offline. No model key or Quilio key required; the model backend and the HTTP transport are both injected.

Licence

MIT for this package. The hosted panel is a commercial service.

Metadata

Release files for refereed 0.2.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 refereed 0.2.0
File Size Uploaded Provenance Actions
refereed-0.2.0.tar.gz 18.5 kB Without provenance Details for refereed-0.2.0.tar.gz

Built distribution (wheel)

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

Total release size: 34.6 kB

Release files / refereed-0.2.0.tar.gz

Download URL refereed-0.2.0.tar.gz
Size 18.5 kB
Tags Source
SHA-256 checksum
How to use checksums
6e37ba3b96aa4c3d0d9c19cbdfdc4ee426a21bb8d2251d4354dc22e57a0ccc43
BLAKE2b-256 checksum
How to use checksums
722e26b9addcba9e030279ba57d0da926c11e14f677af684b299de128eb11968
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / refereed-0.2.0-py3-none-any.whl

Download URL refereed-0.2.0-py3-none-any.whl
Size 16.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f9b5205243d972793076987f01ef50fc3369a9604831e004e3af87cae825cd53
BLAKE2b-256 checksum
How to use checksums
50cbf52cfc8788c897fb960cdfabf5c78606105abf2d8587295cea9e6da28756
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Security for refereed 0.2.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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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