Multi-agent LLM tool for critically reading biomedical and pharmacology research papers
Project description
paperlab
English
paperlab is an open-source multi-agent LLM tool for critically reading biomedical and pharmacology research papers. Local by default, provider-agnostic, built for students and researchers.
What it does
You give paperlab a PDF of a research paper. Four AI agents read it in parallel:
- Summarizer — what the paper actually claims
- Methodologist — study design, CONSORT/PRISMA/STROBE compliance, reproducibility
- Critic — statistical weaknesses, p-hacking, cherry-picking, conflicts of interest
- Contextualizer — where this fits in the field, related work
You get a structured report in Markdown or JSON. Two modes:
rigorous— strict peer-review style critique for postgrads and researcherslearning— gentle explanation for undergraduates reading their first papers
Two output languages: English or Russian.
Install
Requires Python 3.11 or 3.12. Python 3.14 is not yet supported (some transitive dependencies do not build on 3.14).
pipx install --python python3.12 paperlab
paperlab init
Alternative — install with pip inside a project venv:
python3.12 -m venv .venv && source .venv/bin/activate
pip install paperlab
paperlab init
Install from source:
git clone https://github.com/zhakhatoff/paperlab.git
cd paperlab
python3.12 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
paperlab --help
paperlab init creates ~/.paperlab/ with a default config.toml and a sessions/ subdirectory. Run with --force to overwrite an existing config.
pipx broken on Python 3.14? If pipx install fails with ensurepip errors, your pipx shared venv is running on Python 3.14. Pin it to 3.12:
rm -rf ~/.local/pipx/shared
PIPX_DEFAULT_PYTHON=$(brew --prefix python@3.12)/bin/python3.12 pipx ensurepath
CLI
| Command | What it does |
|---|---|
paperlab version |
Print installed version |
paperlab init [--force] |
Create ~/.paperlab/{config.toml, sessions/} |
paperlab read <paper.pdf> |
Run the 4-agent review (see flags below) |
paperlab list |
Table of past sessions |
paperlab show <session-id> [--format markdown|json] |
Reprint a past session |
paperlab config get <key> |
Read provider / model / mode / lang / extra.<k> |
paperlab config set <key> <value> |
Update config.toml |
paperlab web |
Launch Gradio dashboard |
paperlab read flags:
| Flag | Values | Default |
|---|---|---|
--mode |
rigorous, learning |
from config |
--lang |
en, ru |
from config |
--provider |
see table below | from config |
--model |
any model string the provider accepts | from config |
--format |
markdown, json |
markdown |
--output |
file path | stdout |
paperlab read paper.pdf --mode rigorous --lang en
paperlab read paper.pdf --mode learning --lang ru --provider ollama --model qwen2.5:7b
paperlab read paper.pdf --format json --output report.json
Providers
paperlab uses LiteLLM under the hood. Supported provider names:
| Name | Where it runs | Auth | Model string example |
|---|---|---|---|
ollama |
Local (default) | none | qwen2.5:7b, llama3.2:3b |
openrouter |
Cloud | OPENROUTER_API_KEY |
openrouter/anthropic/claude-3.5-sonnet |
together |
Cloud | TOGETHER_API_KEY |
together_ai/meta-llama/Llama-3-70b-chat-hf |
groq |
Cloud | GROQ_API_KEY |
groq/llama-3.1-70b-versatile |
gemini |
Cloud | GEMINI_API_KEY |
gemini/gemini-1.5-pro |
anthropic |
Cloud | ANTHROPIC_API_KEY |
claude-3-5-sonnet-20241022 |
openai |
Cloud | OPENAI_API_KEY |
gpt-4o |
custom |
Any OpenAI-compatible endpoint | as needed | LiteLLM convention |
fake |
In-process test double | none | any |
Switch globally with paperlab config set provider <name> or per invocation with --provider.
Config
paperlab config get provider # print current value
paperlab config set provider openai # update config.toml
paperlab config set model gpt-4o
paperlab config set extra.base_url http://localhost:11434
Config is stored in ~/.paperlab/config.toml (or $PAPERLAB_HOME/config.toml).
Privacy
Everything runs locally. PDFs never leave your machine unless you explicitly configure a cloud provider. History is stored in ~/.paperlab/sessions/ as JSONL — grep, back up, delete freely.
Contributing
See CONTRIBUTING.md.
License
MIT
Русский
paperlab — open source инструмент для критического чтения биомедицинских и фармакологических научных статей с помощью команды ИИ-агентов. Локальный по умолчанию, поддерживает разных провайдеров, сделан для студентов и исследователей.
Что делает
Вы даёте paperlab PDF научной статьи. Четыре агента читают её параллельно:
- Summarizer — что статья реально утверждает
- Methodologist — дизайн исследования, соответствие CONSORT/PRISMA/STROBE, воспроизводимость
- Critic — статистические слабости, p-hacking, cherry-picking, конфликты интересов
- Contextualizer — место в поле, связь с литературой
Получаете структурированный разбор в Markdown или JSON. Два режима:
rigorous— жёсткая критика в стиле peer-review для аспирантов и исследователейlearning— мягкий разбор для студентов, читающих первые статьи
Два языка вывода: английский или русский.
Установка
Требуется Python 3.11 или 3.12. Python 3.14 пока не поддерживается (часть транзитивных зависимостей не собирается на 3.14).
pipx install --python python3.12 paperlab
paperlab init
Или через pip в проектном venv:
python3.12 -m venv .venv && source .venv/bin/activate
pip install paperlab
paperlab init
Из исходников:
git clone https://github.com/zhakhatoff/paperlab.git
cd paperlab
python3.12 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
paperlab --help
pipx падает на Python 3.14? Если pipx install валится с ошибкой про ensurepip, у pipx общий venv на Python 3.14. Перегони его на 3.12:
rm -rf ~/.local/pipx/shared
PIPX_DEFAULT_PYTHON=$(brew --prefix python@3.12)/bin/python3.12 pipx ensurepath
Команда paperlab init создаёт ~/.paperlab/ с дефолтным config.toml и поддиректорией sessions/. Флаг --force перезаписывает существующий конфиг.
Использование
paperlab read paper.pdf --mode rigorous --lang ru
paperlab read paper.pdf --mode learning --lang en --provider ollama --model qwen2.5:7b
paperlab list # история разборов
paperlab show <session-id> # открыть прошлый разбор
paperlab web # веб-интерфейс в браузере (фаза 8)
Формат вывода:
paperlab read paper.pdf --format markdown # по умолчанию
paperlab read paper.pdf --format json --output report.json
Провайдеры
Работает с любым из этих без изменений в коде:
ollama(локально, по умолчанию, бесплатно)openrouter(единый доступ к GPT, Claude, Gemini, Llama и т.д.)together,groq,gemini,anthropic,openaicustom(любой OpenAI-совместимый endpoint)
Переключение: paperlab config set provider ollama или флаг --provider при запуске.
Конфигурация
paperlab config get provider # показать текущее значение
paperlab config set provider openai # обновить config.toml
paperlab config set model gpt-4o
paperlab config set extra.base_url http://localhost:11434
Конфиг хранится в ~/.paperlab/config.toml (или $PAPERLAB_HOME/config.toml).
Приватность
Всё работает локально. PDF не покидает вашу машину, если вы явно не настроили облачного провайдера. История хранится в ~/.paperlab/sessions/ в формате JSONL — можно грепать, бэкапить, удалять.
Участие в разработке
См. CONTRIBUTING.md.
Лицензия
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file paperlab-0.1.3.tar.gz.
File metadata
- Download URL: paperlab-0.1.3.tar.gz
- Upload date:
- Size: 35.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4fd400e875e1c5bc573022c7440f8eb620c85acd9f9430f60dc6d849cea5eee
|
|
| MD5 |
03cad756d3498f431093e5ee01e80369
|
|
| BLAKE2b-256 |
134219afb195cc3cfd616632854b7c494c3774376cb4d26e1e2716474cdb0885
|
Provenance
The following attestation bundles were made for paperlab-0.1.3.tar.gz:
Publisher:
publish.yml on zhakhatoff/paperlab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paperlab-0.1.3.tar.gz -
Subject digest:
b4fd400e875e1c5bc573022c7440f8eb620c85acd9f9430f60dc6d849cea5eee - Sigstore transparency entry: 2099288824
- Sigstore integration time:
-
Permalink:
zhakhatoff/paperlab@fe1e8923e03f55218bf0158d66fe3729201387a9 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/zhakhatoff
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fe1e8923e03f55218bf0158d66fe3729201387a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file paperlab-0.1.3-py3-none-any.whl.
File metadata
- Download URL: paperlab-0.1.3-py3-none-any.whl
- Upload date:
- Size: 28.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c1157d180429641cba0af69107ef1b717a7d87b1fc6cb2ff54c1511d7f109b6
|
|
| MD5 |
211f616c0d89d0cae9cc360bcb5e87ba
|
|
| BLAKE2b-256 |
33f14ac9abe662fc7cc6d92ad2de0a4a5b4dce2d3d9a4776acf27688968ba6c0
|
Provenance
The following attestation bundles were made for paperlab-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on zhakhatoff/paperlab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paperlab-0.1.3-py3-none-any.whl -
Subject digest:
7c1157d180429641cba0af69107ef1b717a7d87b1fc6cb2ff54c1511d7f109b6 - Sigstore transparency entry: 2099289211
- Sigstore integration time:
-
Permalink:
zhakhatoff/paperlab@fe1e8923e03f55218bf0158d66fe3729201387a9 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/zhakhatoff
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fe1e8923e03f55218bf0158d66fe3729201387a9 -
Trigger Event:
push
-
Statement type: