academic-refchecker 2.0.16__py3-none-any.whl → 2.0.18__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: academic-refchecker
3
- Version: 2.0.16
3
+ Version: 2.0.18
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
 
@@ -1,9 +1,9 @@
1
- academic_refchecker-2.0.16.dist-info/licenses/LICENSE,sha256=Kwrx3fePVCeEFDCZvCW4OuoTNBiSoYbpGBI6qzGhWF0,1067
1
+ academic_refchecker-2.0.18.dist-info/licenses/LICENSE,sha256=Kwrx3fePVCeEFDCZvCW4OuoTNBiSoYbpGBI6qzGhWF0,1067
2
2
  backend/__init__.py,sha256=TFVkOx5tSp3abty15RzUbaSwQ9ZD0kfUn7PDh63xkYY,521
3
3
  backend/__main__.py,sha256=74V7yUMsRSZaaRyXYm-rZVc3TVUcUgwsoTQTUbV5EqM,211
4
4
  backend/cli.py,sha256=xV3l9M5OdNQQYOcrzj2d_7RmCgj7CXP_1oi0TPe6zNo,1672
5
5
  backend/concurrency.py,sha256=2KY9I_8dDkyl_HTGx27ZxU4rFXx2vqbGOlo5RrRbPjA,3223
6
- backend/database.py,sha256=1jLP1m9vNk5sEs4bh_xmX0T5ilZkUTX1c7nOVz5XnNc,30681
6
+ backend/database.py,sha256=mMDXdkoEutNI9jLNgqyUbwAQxVdgG0scoAubXhbPWK4,31067
7
7
  backend/main.py,sha256=Vh_hbLAGYZzitwXAZFRiU68S25ySGPmNGepQo2qwzfQ,56298
8
8
  backend/models.py,sha256=El2F-RTHgxQ7-WODmiYCpjsTFDpjwF9PBt-JDa_XipE,2591
9
9
  backend/refchecker_wrapper.py,sha256=VSQkfsMGul2bj0S7BqvhqlyuQwWykYK6fHkRKVoVFw4,55313
@@ -19,7 +19,7 @@ backend/static/assets/index-DMZJNrR0.js,sha256=UhK5CQ8IufZmx6FTvXUCtkRxTqpGK7czS
19
19
  backend/static/assets/index-hk21nqxR.js,sha256=z2agP8ZFYw4AfYi-GJ5E_8_k-lPF-frXOJtPk-I0hDs,369533
20
20
  refchecker/__init__.py,sha256=Pg5MrtLxDBRcNYcI02N-bv3tzURVd1S3nQ8IyF7Zw7E,322
21
21
  refchecker/__main__.py,sha256=agBbT9iKN0g2xXtRNCoh29Nr7z2n5vU-r0MCVJKi4tI,232
22
- refchecker/__version__.py,sha256=26H6z4t4GMLlqIinf2txa-9ebt2c1ncdGIlLLusiaKA,66
22
+ refchecker/__version__.py,sha256=Xv9iRZBORGbLDjCyUAxBF30FP9L_w8z2drgb3UdJVXI,66
23
23
  refchecker/checkers/__init__.py,sha256=-dR7HX0bfPq9YMXrnODoYbfNWFLqu706xoVsUdWHYRI,611
24
24
  refchecker/checkers/arxiv_citation.py,sha256=j_waQmQSP3iuZdVuBE92ghtiOdGFTCx09s6f4mHik6o,27777
25
25
  refchecker/checkers/crossref.py,sha256=88moAyTudBqf9SKqTQkNAq1yyuRe95f8r4EpmJznupQ,20937
@@ -62,8 +62,8 @@ refchecker/utils/mock_objects.py,sha256=QxU-UXyHSY27IZYN8Sb8ei0JtNkpGSdMXoErrRLH
62
62
  refchecker/utils/text_utils.py,sha256=Tx1k0SqS1cmw4N9BDJY-Ipep2T-HMmKPqi4SMcq1ZJ8,235751
63
63
  refchecker/utils/unicode_utils.py,sha256=-WBKarXO756p7fd7gCeNsMag4ztDNURwFX5IVniOtwY,10366
64
64
  refchecker/utils/url_utils.py,sha256=7b0rWCQJSajzqOvD7ghsBZPejiq6mUIz6SGhvU_WGDs,9441
65
- academic_refchecker-2.0.16.dist-info/METADATA,sha256=sxE1gVhJkFMEVu8Z8OKz4nhzi8K4LI4hqGTBI525F8g,26611
66
- academic_refchecker-2.0.16.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
67
- academic_refchecker-2.0.16.dist-info/entry_points.txt,sha256=9cREsaKwlp05Ql0CBIjKrNHk5IG2cHY5LvJPsV2-SxA,108
68
- academic_refchecker-2.0.16.dist-info/top_level.txt,sha256=FfNvrvpj25gfpUBjW0epvz7Qrdejhups5Za_DBiSRu4,19
69
- academic_refchecker-2.0.16.dist-info/RECORD,,
65
+ academic_refchecker-2.0.18.dist-info/METADATA,sha256=QdH4y4-bDSXrM2Ah6UiYB97losRkX8PKG5d454M0icQ,29987
66
+ academic_refchecker-2.0.18.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
67
+ academic_refchecker-2.0.18.dist-info/entry_points.txt,sha256=9cREsaKwlp05Ql0CBIjKrNHk5IG2cHY5LvJPsV2-SxA,108
68
+ academic_refchecker-2.0.18.dist-info/top_level.txt,sha256=FfNvrvpj25gfpUBjW0epvz7Qrdejhups5Za_DBiSRu4,19
69
+ academic_refchecker-2.0.18.dist-info/RECORD,,
backend/database.py CHANGED
@@ -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"))
refchecker/__version__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """Version information for RefChecker."""
2
2
 
3
- __version__ = "2.0.16"
3
+ __version__ = "2.0.18"