academic-refchecker 2.0.16__tar.gz → 2.0.17__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. {academic_refchecker-2.0.16/academic_refchecker.egg-info → academic_refchecker-2.0.17}/PKG-INFO +156 -22
  2. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/README.md +155 -21
  3. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17/academic_refchecker.egg-info}/PKG-INFO +156 -22
  4. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/database.py +10 -0
  5. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/__version__.py +1 -1
  6. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/LICENSE +0 -0
  7. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/MANIFEST.in +0 -0
  8. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/academic_refchecker.egg-info/SOURCES.txt +0 -0
  9. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/academic_refchecker.egg-info/dependency_links.txt +0 -0
  10. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/academic_refchecker.egg-info/entry_points.txt +0 -0
  11. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/academic_refchecker.egg-info/requires.txt +0 -0
  12. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/academic_refchecker.egg-info/top_level.txt +0 -0
  13. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/__init__.py +0 -0
  14. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/__main__.py +0 -0
  15. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/cli.py +0 -0
  16. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/concurrency.py +0 -0
  17. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/main.py +0 -0
  18. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/models.py +0 -0
  19. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/refchecker_wrapper.py +0 -0
  20. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/static/assets/index-2P6L_39v.css +0 -0
  21. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/static/assets/index-B92lKsA8.js +0 -0
  22. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/static/assets/index-BuguAhjS.css +0 -0
  23. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/static/assets/index-DMZJNrR0.js +0 -0
  24. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/static/assets/index-hk21nqxR.js +0 -0
  25. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/static/favicon.svg +0 -0
  26. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/static/index.html +0 -0
  27. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/static/vite.svg +0 -0
  28. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/thumbnail.py +0 -0
  29. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/backend/websocket_manager.py +0 -0
  30. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/pyproject.toml +0 -0
  31. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/requirements.txt +0 -0
  32. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/scripts/download_db.py +0 -0
  33. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/scripts/run_tests.py +0 -0
  34. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/scripts/start_vllm_server.py +0 -0
  35. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/setup.cfg +0 -0
  36. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/__init__.py +0 -0
  37. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/__main__.py +0 -0
  38. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/__init__.py +0 -0
  39. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/arxiv_citation.py +0 -0
  40. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/crossref.py +0 -0
  41. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/enhanced_hybrid_checker.py +0 -0
  42. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/github_checker.py +0 -0
  43. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/local_semantic_scholar.py +0 -0
  44. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/openalex.py +0 -0
  45. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/openreview_checker.py +0 -0
  46. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/pdf_paper_checker.py +0 -0
  47. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/semantic_scholar.py +0 -0
  48. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/checkers/webpage_checker.py +0 -0
  49. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/config/__init__.py +0 -0
  50. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/config/logging.conf +0 -0
  51. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/config/settings.py +0 -0
  52. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/core/__init__.py +0 -0
  53. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/core/db_connection_pool.py +0 -0
  54. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/core/parallel_processor.py +0 -0
  55. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/core/refchecker.py +0 -0
  56. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/database/__init__.py +0 -0
  57. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/database/download_semantic_scholar_db.py +0 -0
  58. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/llm/__init__.py +0 -0
  59. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/llm/base.py +0 -0
  60. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/llm/providers.py +0 -0
  61. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/scripts/__init__.py +0 -0
  62. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/scripts/start_vllm_server.py +0 -0
  63. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/services/__init__.py +0 -0
  64. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/services/pdf_processor.py +0 -0
  65. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/__init__.py +0 -0
  66. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/arxiv_rate_limiter.py +0 -0
  67. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/arxiv_utils.py +0 -0
  68. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/author_utils.py +0 -0
  69. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/biblatex_parser.py +0 -0
  70. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/bibliography_utils.py +0 -0
  71. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/bibtex_parser.py +0 -0
  72. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/config_validator.py +0 -0
  73. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/db_utils.py +0 -0
  74. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/doi_utils.py +0 -0
  75. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/error_utils.py +0 -0
  76. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/mock_objects.py +0 -0
  77. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/text_utils.py +0 -0
  78. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/unicode_utils.py +0 -0
  79. {academic_refchecker-2.0.16 → academic_refchecker-2.0.17}/src/refchecker/utils/url_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: academic-refchecker
3
- Version: 2.0.16
3
+ Version: 2.0.17
4
4
  Summary: A comprehensive tool for validating reference accuracy in academic papers
5
5
  Author-email: Mark Russinovich <markrussinovich@hotmail.com>
6
6
  License-Expression: MIT
@@ -140,6 +140,7 @@ Learn about RefChecker's design philosophy and development process in this detai
140
140
  - [📊 Sample Output](#-sample-output)
141
141
  - [🎯 Features](#-features)
142
142
  - [🚀 Quick Start](#-quick-start)
143
+ - [🐳 Docker (Recommended)](#-docker-recommended)
143
144
  - [🌐 Web UI](#-web-ui)
144
145
  - [🤖 LLM-Enhanced Reference Extraction](#-llm-enhanced-reference-extraction)
145
146
  - [📦 Installation](#-installation)
@@ -164,7 +165,15 @@ Learn about RefChecker's design philosophy and development process in this detai
164
165
 
165
166
  ## 🚀 Quick Start
166
167
 
167
- ### Check Your First Paper
168
+ ### Easiest: Use Docker
169
+
170
+ ```bash
171
+ docker run -p 8000:8000 -e ANTHROPIC_API_KEY=your_key ghcr.io/markrussinovich/refchecker:latest
172
+ ```
173
+
174
+ Open **http://localhost:8000** in your browser. See [Docker](#-docker-recommended) for more options.
175
+
176
+ ### Command Line (requires Python installation)
168
177
 
169
178
  1. **Check a famous paper:**
170
179
  ```bash
@@ -183,15 +192,139 @@ Learn about RefChecker's design philosophy and development process in this detai
183
192
 
184
193
  > **⚡ Performance Tip**: Reference verification takes 5-10 seconds per reference without a Semantic Scholar API key due to rate limiting. With an API key, verification speeds up to 1-2 seconds per reference. Set `SEMANTIC_SCHOLAR_API_KEY` environment variable or use `--semantic-scholar-api-key` for faster processing.
185
194
 
195
+ ## 🐳 Docker (Recommended)
196
+
197
+ The easiest way to run RefChecker is with Docker. Pre-built images are automatically published to GitHub Container Registry on every release.
198
+
199
+ ### Quick Start
200
+
201
+ ```bash
202
+ # Pull and run the latest image (works on Intel/AMD and Apple Silicon)
203
+ docker run -p 8000:8000 ghcr.io/markrussinovich/refchecker:latest
204
+ ```
205
+
206
+ Open **http://localhost:8000** in your browser.
207
+
208
+ ### With LLM API Keys
209
+
210
+ To use LLM-powered reference extraction (recommended for best accuracy), pass your API key:
211
+
212
+ ```bash
213
+ # Using Anthropic Claude (recommended)
214
+ docker run -p 8000:8000 \
215
+ -e ANTHROPIC_API_KEY=your_key_here \
216
+ ghcr.io/markrussinovich/refchecker:latest
217
+
218
+ # Using OpenAI
219
+ docker run -p 8000:8000 \
220
+ -e OPENAI_API_KEY=your_key_here \
221
+ ghcr.io/markrussinovich/refchecker:latest
222
+
223
+ # Using Google Gemini
224
+ docker run -p 8000:8000 \
225
+ -e GOOGLE_API_KEY=your_key_here \
226
+ ghcr.io/markrussinovich/refchecker:latest
227
+ ```
228
+
229
+ ### Persistent Data
230
+
231
+ To persist check history and settings between container restarts:
232
+
233
+ ```bash
234
+ docker run -p 8000:8000 \
235
+ -v refchecker-data:/app/data \
236
+ -e ANTHROPIC_API_KEY=your_key_here \
237
+ ghcr.io/markrussinovich/refchecker:latest
238
+ ```
239
+
240
+ ### Using Docker Compose
241
+
242
+ For easier configuration, clone the repo and use the included `docker-compose.yml`:
243
+
244
+ ```bash
245
+ git clone https://github.com/markrussinovich/refchecker.git
246
+ cd refchecker
247
+
248
+ # Copy the example environment file and add your API keys
249
+ cp .env.example .env
250
+ # Edit .env with your API keys
251
+
252
+ # Start RefChecker
253
+ docker compose up
254
+
255
+ # Or run in background
256
+ docker compose up -d
257
+ ```
258
+
259
+ ### GPU Support for Local Models
260
+
261
+ For running local LLMs with vLLM (no API keys needed), use the GPU-enabled image:
262
+
263
+ ```bash
264
+ # Pull the GPU image (amd64/NVIDIA only)
265
+ docker pull ghcr.io/markrussinovich/refchecker:gpu
266
+
267
+ # Run with GPU access
268
+ docker run --gpus all -p 8000:8000 \
269
+ -v refchecker-data:/app/data \
270
+ -v refchecker-models:/app/models \
271
+ ghcr.io/markrussinovich/refchecker:gpu
272
+ ```
273
+
274
+ Or with Docker Compose:
275
+
276
+ ```bash
277
+ # Start with GPU profile
278
+ docker compose --profile gpu up
279
+ ```
280
+
281
+ ### Available Image Tags
282
+
283
+ | Tag | Description | Architectures | Size |
284
+ |-----|-------------|---------------|------|
285
+ | `latest` | Latest stable release with cloud LLM support | amd64, arm64 | ~800MB |
286
+ | `X.Y.Z` | Specific version (e.g., `1.2.50`) | amd64, arm64 | ~800MB |
287
+ | `gpu` | GPU-enabled with vLLM/PyTorch for local models | amd64 only | ~12GB |
288
+ | `X.Y.Z-gpu` | Specific GPU version | amd64 only | ~12GB |
289
+
290
+ > **Note**: The `gpu` images are amd64 only because CUDA is not available on ARM. For Apple Silicon Macs, use the standard `latest` tag with cloud LLM APIs.
291
+
292
+ ### Building Locally
293
+
294
+ ```bash
295
+ # Build standard image
296
+ make docker-build
297
+
298
+ # Build GPU image
299
+ make docker-build-gpu
300
+
301
+ # Run locally
302
+ make docker-run
303
+
304
+ # Test the build
305
+ make docker-test
306
+ ```
307
+
186
308
  ## 🌐 Web UI
187
309
 
188
- RefChecker also includes a modern web interface with real-time progress updates, check history, and export options.
310
+ RefChecker includes a modern web interface with real-time progress updates, check history, and export options.
189
311
 
190
312
  ![RefChecker Web UI](assets/webui.png)
191
313
 
192
- ### Option 1: Install from PyPI (Recommended)
314
+ ### Features
315
+
316
+ - ✨ Real-time validation with live progress updates
317
+ - 📄 Support for ArXiv URLs and file uploads (PDF, LaTeX, text)
318
+ - 📊 Live statistics with filtering by status
319
+ - 📋 Export references as Markdown, plain text, or BibTeX (with corrected values)
320
+ - 📚 Persistent check history
321
+ - 🌓 Automatic dark/light mode
322
+
323
+ ### Option 1: Docker (See Above)
324
+
325
+ The Docker image includes the complete Web UI - just run the container and open http://localhost:8000.
193
326
 
194
- The simplest way to run the Web UI is using the pip-installed package:
327
+ ### Option 2: Install from PyPI
195
328
 
196
329
  ```bash
197
330
  # Install RefChecker with Web UI support
@@ -203,15 +336,13 @@ refchecker-webui
203
336
 
204
337
  Then open **http://localhost:8000** in your browser.
205
338
 
206
- The `refchecker-webui` command starts a complete web server with both the API backend and the pre-built frontend.
207
-
208
339
  **Options:**
209
340
  ```bash
210
341
  refchecker-webui --port 8080 # Use a different port
211
342
  refchecker-webui --host 0.0.0.0 # Allow external connections
212
343
  ```
213
344
 
214
- ### Option 2: Run from Cloned Repository (Development)
345
+ ### Option 3: Run from Cloned Repository (Development)
215
346
 
216
347
  If you're developing or modifying the Web UI:
217
348
 
@@ -248,15 +379,6 @@ cd web-ui
248
379
  npm run dev
249
380
  ```
250
381
 
251
- ### Features
252
-
253
- - ✨ Real-time validation with live progress updates
254
- - 📄 Support for ArXiv URLs and file uploads (PDF, LaTeX, text)
255
- - 📊 Live statistics with filtering by status
256
- - 📋 Export references as Markdown, plain text, or BibTeX (with corrected values)
257
- - 📚 Persistent check history
258
- - 🌓 Automatic dark/light mode
259
-
260
382
  For complete Web UI documentation, see **[web-ui/README.md](web-ui/README.md)**.
261
383
 
262
384
  ## 🤖 LLM-Enhanced Reference Extraction
@@ -350,12 +472,20 @@ You can debug vllm server issues by running refchecker with the `--debug` flag.
350
472
 
351
473
  ## 📦 Installation
352
474
 
353
- ### Prerequisites
475
+ ### Option 1: Docker (Recommended)
354
476
 
355
- - **Python 3.8+** (3.10+ recommended)
356
- - **Node.js 18+** and npm (only required for Web UI)
477
+ No installation required - just run the Docker image:
357
478
 
358
- ### Option 1: Install from PyPI (Recommended)
479
+ ```bash
480
+ docker run -p 8000:8000 ghcr.io/markrussinovich/refchecker:latest
481
+ ```
482
+
483
+ See [Docker](#-docker-recommended) section for full details on configuration, persistent data, and GPU support.
484
+
485
+ ### Option 2: Install from PyPI
486
+
487
+ **Prerequisites:**
488
+ - **Python 3.8+** (3.10+ recommended)
359
489
 
360
490
  For the latest stable release with all features:
361
491
 
@@ -377,7 +507,11 @@ Other optional extras:
377
507
  - **optional**: Enhanced features (lxml, selenium, pikepdf, nltk, scikit-learn)
378
508
  - **vllm**: Local model inference with vLLM
379
509
 
380
- ### Option 2: Install from Source
510
+ ### Option 3: Install from Source
511
+
512
+ **Prerequisites:**
513
+ - **Python 3.8+** (3.10+ recommended)
514
+ - **Node.js 18+** and npm (only required for Web UI development)
381
515
 
382
516
  #### 1. Clone the Repository
383
517
 
@@ -68,6 +68,7 @@ Learn about RefChecker's design philosophy and development process in this detai
68
68
  - [📊 Sample Output](#-sample-output)
69
69
  - [🎯 Features](#-features)
70
70
  - [🚀 Quick Start](#-quick-start)
71
+ - [🐳 Docker (Recommended)](#-docker-recommended)
71
72
  - [🌐 Web UI](#-web-ui)
72
73
  - [🤖 LLM-Enhanced Reference Extraction](#-llm-enhanced-reference-extraction)
73
74
  - [📦 Installation](#-installation)
@@ -92,7 +93,15 @@ Learn about RefChecker's design philosophy and development process in this detai
92
93
 
93
94
  ## 🚀 Quick Start
94
95
 
95
- ### Check Your First Paper
96
+ ### Easiest: Use Docker
97
+
98
+ ```bash
99
+ docker run -p 8000:8000 -e ANTHROPIC_API_KEY=your_key ghcr.io/markrussinovich/refchecker:latest
100
+ ```
101
+
102
+ Open **http://localhost:8000** in your browser. See [Docker](#-docker-recommended) for more options.
103
+
104
+ ### Command Line (requires Python installation)
96
105
 
97
106
  1. **Check a famous paper:**
98
107
  ```bash
@@ -111,15 +120,139 @@ Learn about RefChecker's design philosophy and development process in this detai
111
120
 
112
121
  > **⚡ Performance Tip**: Reference verification takes 5-10 seconds per reference without a Semantic Scholar API key due to rate limiting. With an API key, verification speeds up to 1-2 seconds per reference. Set `SEMANTIC_SCHOLAR_API_KEY` environment variable or use `--semantic-scholar-api-key` for faster processing.
113
122
 
123
+ ## 🐳 Docker (Recommended)
124
+
125
+ The easiest way to run RefChecker is with Docker. Pre-built images are automatically published to GitHub Container Registry on every release.
126
+
127
+ ### Quick Start
128
+
129
+ ```bash
130
+ # Pull and run the latest image (works on Intel/AMD and Apple Silicon)
131
+ docker run -p 8000:8000 ghcr.io/markrussinovich/refchecker:latest
132
+ ```
133
+
134
+ Open **http://localhost:8000** in your browser.
135
+
136
+ ### With LLM API Keys
137
+
138
+ To use LLM-powered reference extraction (recommended for best accuracy), pass your API key:
139
+
140
+ ```bash
141
+ # Using Anthropic Claude (recommended)
142
+ docker run -p 8000:8000 \
143
+ -e ANTHROPIC_API_KEY=your_key_here \
144
+ ghcr.io/markrussinovich/refchecker:latest
145
+
146
+ # Using OpenAI
147
+ docker run -p 8000:8000 \
148
+ -e OPENAI_API_KEY=your_key_here \
149
+ ghcr.io/markrussinovich/refchecker:latest
150
+
151
+ # Using Google Gemini
152
+ docker run -p 8000:8000 \
153
+ -e GOOGLE_API_KEY=your_key_here \
154
+ ghcr.io/markrussinovich/refchecker:latest
155
+ ```
156
+
157
+ ### Persistent Data
158
+
159
+ To persist check history and settings between container restarts:
160
+
161
+ ```bash
162
+ docker run -p 8000:8000 \
163
+ -v refchecker-data:/app/data \
164
+ -e ANTHROPIC_API_KEY=your_key_here \
165
+ ghcr.io/markrussinovich/refchecker:latest
166
+ ```
167
+
168
+ ### Using Docker Compose
169
+
170
+ For easier configuration, clone the repo and use the included `docker-compose.yml`:
171
+
172
+ ```bash
173
+ git clone https://github.com/markrussinovich/refchecker.git
174
+ cd refchecker
175
+
176
+ # Copy the example environment file and add your API keys
177
+ cp .env.example .env
178
+ # Edit .env with your API keys
179
+
180
+ # Start RefChecker
181
+ docker compose up
182
+
183
+ # Or run in background
184
+ docker compose up -d
185
+ ```
186
+
187
+ ### GPU Support for Local Models
188
+
189
+ For running local LLMs with vLLM (no API keys needed), use the GPU-enabled image:
190
+
191
+ ```bash
192
+ # Pull the GPU image (amd64/NVIDIA only)
193
+ docker pull ghcr.io/markrussinovich/refchecker:gpu
194
+
195
+ # Run with GPU access
196
+ docker run --gpus all -p 8000:8000 \
197
+ -v refchecker-data:/app/data \
198
+ -v refchecker-models:/app/models \
199
+ ghcr.io/markrussinovich/refchecker:gpu
200
+ ```
201
+
202
+ Or with Docker Compose:
203
+
204
+ ```bash
205
+ # Start with GPU profile
206
+ docker compose --profile gpu up
207
+ ```
208
+
209
+ ### Available Image Tags
210
+
211
+ | Tag | Description | Architectures | Size |
212
+ |-----|-------------|---------------|------|
213
+ | `latest` | Latest stable release with cloud LLM support | amd64, arm64 | ~800MB |
214
+ | `X.Y.Z` | Specific version (e.g., `1.2.50`) | amd64, arm64 | ~800MB |
215
+ | `gpu` | GPU-enabled with vLLM/PyTorch for local models | amd64 only | ~12GB |
216
+ | `X.Y.Z-gpu` | Specific GPU version | amd64 only | ~12GB |
217
+
218
+ > **Note**: The `gpu` images are amd64 only because CUDA is not available on ARM. For Apple Silicon Macs, use the standard `latest` tag with cloud LLM APIs.
219
+
220
+ ### Building Locally
221
+
222
+ ```bash
223
+ # Build standard image
224
+ make docker-build
225
+
226
+ # Build GPU image
227
+ make docker-build-gpu
228
+
229
+ # Run locally
230
+ make docker-run
231
+
232
+ # Test the build
233
+ make docker-test
234
+ ```
235
+
114
236
  ## 🌐 Web UI
115
237
 
116
- RefChecker also includes a modern web interface with real-time progress updates, check history, and export options.
238
+ RefChecker includes a modern web interface with real-time progress updates, check history, and export options.
117
239
 
118
240
  ![RefChecker Web UI](assets/webui.png)
119
241
 
120
- ### Option 1: Install from PyPI (Recommended)
242
+ ### Features
243
+
244
+ - ✨ Real-time validation with live progress updates
245
+ - 📄 Support for ArXiv URLs and file uploads (PDF, LaTeX, text)
246
+ - 📊 Live statistics with filtering by status
247
+ - 📋 Export references as Markdown, plain text, or BibTeX (with corrected values)
248
+ - 📚 Persistent check history
249
+ - 🌓 Automatic dark/light mode
250
+
251
+ ### Option 1: Docker (See Above)
252
+
253
+ The Docker image includes the complete Web UI - just run the container and open http://localhost:8000.
121
254
 
122
- The simplest way to run the Web UI is using the pip-installed package:
255
+ ### Option 2: Install from PyPI
123
256
 
124
257
  ```bash
125
258
  # Install RefChecker with Web UI support
@@ -131,15 +264,13 @@ refchecker-webui
131
264
 
132
265
  Then open **http://localhost:8000** in your browser.
133
266
 
134
- The `refchecker-webui` command starts a complete web server with both the API backend and the pre-built frontend.
135
-
136
267
  **Options:**
137
268
  ```bash
138
269
  refchecker-webui --port 8080 # Use a different port
139
270
  refchecker-webui --host 0.0.0.0 # Allow external connections
140
271
  ```
141
272
 
142
- ### Option 2: Run from Cloned Repository (Development)
273
+ ### Option 3: Run from Cloned Repository (Development)
143
274
 
144
275
  If you're developing or modifying the Web UI:
145
276
 
@@ -176,15 +307,6 @@ cd web-ui
176
307
  npm run dev
177
308
  ```
178
309
 
179
- ### Features
180
-
181
- - ✨ Real-time validation with live progress updates
182
- - 📄 Support for ArXiv URLs and file uploads (PDF, LaTeX, text)
183
- - 📊 Live statistics with filtering by status
184
- - 📋 Export references as Markdown, plain text, or BibTeX (with corrected values)
185
- - 📚 Persistent check history
186
- - 🌓 Automatic dark/light mode
187
-
188
310
  For complete Web UI documentation, see **[web-ui/README.md](web-ui/README.md)**.
189
311
 
190
312
  ## 🤖 LLM-Enhanced Reference Extraction
@@ -278,12 +400,20 @@ You can debug vllm server issues by running refchecker with the `--debug` flag.
278
400
 
279
401
  ## 📦 Installation
280
402
 
281
- ### Prerequisites
403
+ ### Option 1: Docker (Recommended)
282
404
 
283
- - **Python 3.8+** (3.10+ recommended)
284
- - **Node.js 18+** and npm (only required for Web UI)
405
+ No installation required - just run the Docker image:
285
406
 
286
- ### Option 1: Install from PyPI (Recommended)
407
+ ```bash
408
+ docker run -p 8000:8000 ghcr.io/markrussinovich/refchecker:latest
409
+ ```
410
+
411
+ See [Docker](#-docker-recommended) section for full details on configuration, persistent data, and GPU support.
412
+
413
+ ### Option 2: Install from PyPI
414
+
415
+ **Prerequisites:**
416
+ - **Python 3.8+** (3.10+ recommended)
287
417
 
288
418
  For the latest stable release with all features:
289
419
 
@@ -305,7 +435,11 @@ Other optional extras:
305
435
  - **optional**: Enhanced features (lxml, selenium, pikepdf, nltk, scikit-learn)
306
436
  - **vllm**: Local model inference with vLLM
307
437
 
308
- ### Option 2: Install from Source
438
+ ### Option 3: Install from Source
439
+
440
+ **Prerequisites:**
441
+ - **Python 3.8+** (3.10+ recommended)
442
+ - **Node.js 18+** and npm (only required for Web UI development)
309
443
 
310
444
  #### 1. Clone the Repository
311
445
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: academic-refchecker
3
- Version: 2.0.16
3
+ Version: 2.0.17
4
4
  Summary: A comprehensive tool for validating reference accuracy in academic papers
5
5
  Author-email: Mark Russinovich <markrussinovich@hotmail.com>
6
6
  License-Expression: MIT
@@ -140,6 +140,7 @@ Learn about RefChecker's design philosophy and development process in this detai
140
140
  - [📊 Sample Output](#-sample-output)
141
141
  - [🎯 Features](#-features)
142
142
  - [🚀 Quick Start](#-quick-start)
143
+ - [🐳 Docker (Recommended)](#-docker-recommended)
143
144
  - [🌐 Web UI](#-web-ui)
144
145
  - [🤖 LLM-Enhanced Reference Extraction](#-llm-enhanced-reference-extraction)
145
146
  - [📦 Installation](#-installation)
@@ -164,7 +165,15 @@ Learn about RefChecker's design philosophy and development process in this detai
164
165
 
165
166
  ## 🚀 Quick Start
166
167
 
167
- ### Check Your First Paper
168
+ ### Easiest: Use Docker
169
+
170
+ ```bash
171
+ docker run -p 8000:8000 -e ANTHROPIC_API_KEY=your_key ghcr.io/markrussinovich/refchecker:latest
172
+ ```
173
+
174
+ Open **http://localhost:8000** in your browser. See [Docker](#-docker-recommended) for more options.
175
+
176
+ ### Command Line (requires Python installation)
168
177
 
169
178
  1. **Check a famous paper:**
170
179
  ```bash
@@ -183,15 +192,139 @@ Learn about RefChecker's design philosophy and development process in this detai
183
192
 
184
193
  > **⚡ Performance Tip**: Reference verification takes 5-10 seconds per reference without a Semantic Scholar API key due to rate limiting. With an API key, verification speeds up to 1-2 seconds per reference. Set `SEMANTIC_SCHOLAR_API_KEY` environment variable or use `--semantic-scholar-api-key` for faster processing.
185
194
 
195
+ ## 🐳 Docker (Recommended)
196
+
197
+ The easiest way to run RefChecker is with Docker. Pre-built images are automatically published to GitHub Container Registry on every release.
198
+
199
+ ### Quick Start
200
+
201
+ ```bash
202
+ # Pull and run the latest image (works on Intel/AMD and Apple Silicon)
203
+ docker run -p 8000:8000 ghcr.io/markrussinovich/refchecker:latest
204
+ ```
205
+
206
+ Open **http://localhost:8000** in your browser.
207
+
208
+ ### With LLM API Keys
209
+
210
+ To use LLM-powered reference extraction (recommended for best accuracy), pass your API key:
211
+
212
+ ```bash
213
+ # Using Anthropic Claude (recommended)
214
+ docker run -p 8000:8000 \
215
+ -e ANTHROPIC_API_KEY=your_key_here \
216
+ ghcr.io/markrussinovich/refchecker:latest
217
+
218
+ # Using OpenAI
219
+ docker run -p 8000:8000 \
220
+ -e OPENAI_API_KEY=your_key_here \
221
+ ghcr.io/markrussinovich/refchecker:latest
222
+
223
+ # Using Google Gemini
224
+ docker run -p 8000:8000 \
225
+ -e GOOGLE_API_KEY=your_key_here \
226
+ ghcr.io/markrussinovich/refchecker:latest
227
+ ```
228
+
229
+ ### Persistent Data
230
+
231
+ To persist check history and settings between container restarts:
232
+
233
+ ```bash
234
+ docker run -p 8000:8000 \
235
+ -v refchecker-data:/app/data \
236
+ -e ANTHROPIC_API_KEY=your_key_here \
237
+ ghcr.io/markrussinovich/refchecker:latest
238
+ ```
239
+
240
+ ### Using Docker Compose
241
+
242
+ For easier configuration, clone the repo and use the included `docker-compose.yml`:
243
+
244
+ ```bash
245
+ git clone https://github.com/markrussinovich/refchecker.git
246
+ cd refchecker
247
+
248
+ # Copy the example environment file and add your API keys
249
+ cp .env.example .env
250
+ # Edit .env with your API keys
251
+
252
+ # Start RefChecker
253
+ docker compose up
254
+
255
+ # Or run in background
256
+ docker compose up -d
257
+ ```
258
+
259
+ ### GPU Support for Local Models
260
+
261
+ For running local LLMs with vLLM (no API keys needed), use the GPU-enabled image:
262
+
263
+ ```bash
264
+ # Pull the GPU image (amd64/NVIDIA only)
265
+ docker pull ghcr.io/markrussinovich/refchecker:gpu
266
+
267
+ # Run with GPU access
268
+ docker run --gpus all -p 8000:8000 \
269
+ -v refchecker-data:/app/data \
270
+ -v refchecker-models:/app/models \
271
+ ghcr.io/markrussinovich/refchecker:gpu
272
+ ```
273
+
274
+ Or with Docker Compose:
275
+
276
+ ```bash
277
+ # Start with GPU profile
278
+ docker compose --profile gpu up
279
+ ```
280
+
281
+ ### Available Image Tags
282
+
283
+ | Tag | Description | Architectures | Size |
284
+ |-----|-------------|---------------|------|
285
+ | `latest` | Latest stable release with cloud LLM support | amd64, arm64 | ~800MB |
286
+ | `X.Y.Z` | Specific version (e.g., `1.2.50`) | amd64, arm64 | ~800MB |
287
+ | `gpu` | GPU-enabled with vLLM/PyTorch for local models | amd64 only | ~12GB |
288
+ | `X.Y.Z-gpu` | Specific GPU version | amd64 only | ~12GB |
289
+
290
+ > **Note**: The `gpu` images are amd64 only because CUDA is not available on ARM. For Apple Silicon Macs, use the standard `latest` tag with cloud LLM APIs.
291
+
292
+ ### Building Locally
293
+
294
+ ```bash
295
+ # Build standard image
296
+ make docker-build
297
+
298
+ # Build GPU image
299
+ make docker-build-gpu
300
+
301
+ # Run locally
302
+ make docker-run
303
+
304
+ # Test the build
305
+ make docker-test
306
+ ```
307
+
186
308
  ## 🌐 Web UI
187
309
 
188
- RefChecker also includes a modern web interface with real-time progress updates, check history, and export options.
310
+ RefChecker includes a modern web interface with real-time progress updates, check history, and export options.
189
311
 
190
312
  ![RefChecker Web UI](assets/webui.png)
191
313
 
192
- ### Option 1: Install from PyPI (Recommended)
314
+ ### Features
315
+
316
+ - ✨ Real-time validation with live progress updates
317
+ - 📄 Support for ArXiv URLs and file uploads (PDF, LaTeX, text)
318
+ - 📊 Live statistics with filtering by status
319
+ - 📋 Export references as Markdown, plain text, or BibTeX (with corrected values)
320
+ - 📚 Persistent check history
321
+ - 🌓 Automatic dark/light mode
322
+
323
+ ### Option 1: Docker (See Above)
324
+
325
+ The Docker image includes the complete Web UI - just run the container and open http://localhost:8000.
193
326
 
194
- The simplest way to run the Web UI is using the pip-installed package:
327
+ ### Option 2: Install from PyPI
195
328
 
196
329
  ```bash
197
330
  # Install RefChecker with Web UI support
@@ -203,15 +336,13 @@ refchecker-webui
203
336
 
204
337
  Then open **http://localhost:8000** in your browser.
205
338
 
206
- The `refchecker-webui` command starts a complete web server with both the API backend and the pre-built frontend.
207
-
208
339
  **Options:**
209
340
  ```bash
210
341
  refchecker-webui --port 8080 # Use a different port
211
342
  refchecker-webui --host 0.0.0.0 # Allow external connections
212
343
  ```
213
344
 
214
- ### Option 2: Run from Cloned Repository (Development)
345
+ ### Option 3: Run from Cloned Repository (Development)
215
346
 
216
347
  If you're developing or modifying the Web UI:
217
348
 
@@ -248,15 +379,6 @@ cd web-ui
248
379
  npm run dev
249
380
  ```
250
381
 
251
- ### Features
252
-
253
- - ✨ Real-time validation with live progress updates
254
- - 📄 Support for ArXiv URLs and file uploads (PDF, LaTeX, text)
255
- - 📊 Live statistics with filtering by status
256
- - 📋 Export references as Markdown, plain text, or BibTeX (with corrected values)
257
- - 📚 Persistent check history
258
- - 🌓 Automatic dark/light mode
259
-
260
382
  For complete Web UI documentation, see **[web-ui/README.md](web-ui/README.md)**.
261
383
 
262
384
  ## 🤖 LLM-Enhanced Reference Extraction
@@ -350,12 +472,20 @@ You can debug vllm server issues by running refchecker with the `--debug` flag.
350
472
 
351
473
  ## 📦 Installation
352
474
 
353
- ### Prerequisites
475
+ ### Option 1: Docker (Recommended)
354
476
 
355
- - **Python 3.8+** (3.10+ recommended)
356
- - **Node.js 18+** and npm (only required for Web UI)
477
+ No installation required - just run the Docker image:
357
478
 
358
- ### Option 1: Install from PyPI (Recommended)
479
+ ```bash
480
+ docker run -p 8000:8000 ghcr.io/markrussinovich/refchecker:latest
481
+ ```
482
+
483
+ See [Docker](#-docker-recommended) section for full details on configuration, persistent data, and GPU support.
484
+
485
+ ### Option 2: Install from PyPI
486
+
487
+ **Prerequisites:**
488
+ - **Python 3.8+** (3.10+ recommended)
359
489
 
360
490
  For the latest stable release with all features:
361
491
 
@@ -377,7 +507,11 @@ Other optional extras:
377
507
  - **optional**: Enhanced features (lxml, selenium, pikepdf, nltk, scikit-learn)
378
508
  - **vllm**: Local model inference with vLLM
379
509
 
380
- ### Option 2: Install from Source
510
+ ### Option 3: Install from Source
511
+
512
+ **Prerequisites:**
513
+ - **Python 3.8+** (3.10+ recommended)
514
+ - **Node.js 18+** and npm (only required for Web UI development)
381
515
 
382
516
  #### 1. Clone the Repository
383
517
 
@@ -14,10 +14,20 @@ from cryptography.fernet import Fernet
14
14
  def get_data_dir() -> Path:
15
15
  """Get platform-appropriate user data directory for refchecker.
16
16
 
17
+ If REFCHECKER_DATA_DIR environment variable is set, use that path.
18
+ Otherwise, use platform-specific defaults:
19
+
17
20
  Windows: %LOCALAPPDATA%\refchecker
18
21
  macOS: ~/Library/Application Support/refchecker
19
22
  Linux: ~/.local/share/refchecker
20
23
  """
24
+ # Check for environment variable override (useful for Docker)
25
+ env_data_dir = os.environ.get("REFCHECKER_DATA_DIR")
26
+ if env_data_dir:
27
+ data_dir = Path(env_data_dir)
28
+ data_dir.mkdir(parents=True, exist_ok=True)
29
+ return data_dir
30
+
21
31
  if sys.platform == "win32":
22
32
  # Windows: use LOCALAPPDATA
23
33
  base = Path(os.environ.get("LOCALAPPDATA", Path.home() / "AppData" / "Local"))
@@ -1,3 +1,3 @@
1
1
  """Version information for RefChecker."""
2
2
 
3
- __version__ = "2.0.16"
3
+ __version__ = "2.0.17"