scholarcli 1.20__tar.gz → 1.23__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.
- {scholarcli-1.20/src/scholarcli.egg-info → scholarcli-1.23}/PKG-INFO +4 -3
- {scholarcli-1.20 → scholarcli-1.23}/README.md +1 -1
- {scholarcli-1.20 → scholarcli-1.23}/pyproject.toml +4 -3
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/__init__.py +2 -1
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/cli.py +955 -57
- scholarcli-1.23/src/scholar/crossref.py +210 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/llm_review.py +93 -11
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/pdf.py +384 -1
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/review.py +84 -21
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/scholar.py +149 -23
- {scholarcli-1.20 → scholarcli-1.23/src/scholarcli.egg-info}/PKG-INFO +4 -3
- {scholarcli-1.20 → scholarcli-1.23}/src/scholarcli.egg-info/SOURCES.txt +2 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholarcli.egg-info/requires.txt +1 -0
- scholarcli-1.23/tests/test_cli.py +1626 -0
- scholarcli-1.23/tests/test_crossref.py +205 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_llm_review.py +76 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_pdf.py +145 -1
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_review.py +52 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_scholar.py +227 -0
- scholarcli-1.20/tests/test_cli.py +0 -739
- {scholarcli-1.20 → scholarcli-1.23}/LICENSE +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/setup.cfg +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/__main__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/cache.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/enrich.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/notes.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/providers.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/questionary.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/tui.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholar/utils.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholarcli.egg-info/dependency_links.txt +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholarcli.egg-info/entry_points.txt +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/scholarcli.egg-info/top_level.txt +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/aggregator.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/arxiv.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/base.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/crossref.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/google_scholar.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/openalex.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/opencitations.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/apis/semantic_scholar.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/cli.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/exporters/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/exporters/bibtex.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/exporters/csv_exporter.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/exporters/tikz.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/filters/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/filters/filter_engine.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/models.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/paper_utils.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/parsers/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/parsers/pdf_parser.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/scoring/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/scoring/base.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/scoring/llm_scorer.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/scoring/tfidf_scorer.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/services.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/snowballing.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/storage/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/storage/json_storage.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/tui/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/tui/app.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/tui/dialogs.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/tui/setup.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/snowball/visualization.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/__init__.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/analysis.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/cli.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/clustering.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/database.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/grobid.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/logging.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/models.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/project.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/src/tuxedo/tui.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_cache.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_enrich.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_notes.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_providers.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_tui.py +0 -0
- {scholarcli-1.20 → scholarcli-1.23}/tests/test_utils.py +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scholarcli
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.23
|
|
4
4
|
Summary: A tool for structured literature searches across bibliographic databases
|
|
5
5
|
Author-email: Daniel Bosk <dbosk@kth.se>, Ric Glassey <glassey@kth.se>
|
|
6
6
|
License-Expression: MIT
|
|
7
|
-
Requires-Python:
|
|
7
|
+
Requires-Python: <4.0,>=3.12
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
9
|
License-File: LICENSE
|
|
10
10
|
Requires-Dist: requests>=2.32.5
|
|
@@ -35,6 +35,7 @@ Requires-Dist: openai>=1.0.0
|
|
|
35
35
|
Requires-Dist: pyyaml>=6.0
|
|
36
36
|
Requires-Dist: questionary>=2.0.0
|
|
37
37
|
Requires-Dist: llm-github-copilot>=0.3.1
|
|
38
|
+
Requires-Dist: llm-mistral<0.16,>=0.15
|
|
38
39
|
Dynamic: license-file
|
|
39
40
|
|
|
40
41
|
# Scholar
|
|
@@ -302,7 +303,7 @@ scholar llm classify "session-name" --count 10
|
|
|
302
303
|
|
|
303
304
|
### How It Works
|
|
304
305
|
|
|
305
|
-
1. **Tag some papers manually** -
|
|
306
|
+
1. **Tag some papers manually** (recommended) - Examples help the LLM learn your criteria. Tagging ~5 papers (themes for kept, motivations for discarded) improves quality, but classification will still run — with a warning — if you have fewer or none.
|
|
306
307
|
|
|
307
308
|
2. **Set research context** (optional) - Describe your review's focus to help the LLM understand relevance criteria.
|
|
308
309
|
|
|
@@ -263,7 +263,7 @@ scholar llm classify "session-name" --count 10
|
|
|
263
263
|
|
|
264
264
|
### How It Works
|
|
265
265
|
|
|
266
|
-
1. **Tag some papers manually** -
|
|
266
|
+
1. **Tag some papers manually** (recommended) - Examples help the LLM learn your criteria. Tagging ~5 papers (themes for kept, motivations for discarded) improves quality, but classification will still run — with a warning — if you have fewer or none.
|
|
267
267
|
|
|
268
268
|
2. **Set research context** (optional) - Describe your review's focus to help the LLM understand relevance criteria.
|
|
269
269
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "scholarcli"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.23"
|
|
4
4
|
description = "A tool for structured literature searches across bibliographic databases"
|
|
5
5
|
authors = [{ name = "Daniel Bosk", email = "dbosk@kth.se" },
|
|
6
6
|
{ name = "Ric Glassey", email = "glassey@kth.se" }]
|
|
7
7
|
readme = "README.md"
|
|
8
8
|
license = "MIT"
|
|
9
|
-
requires-python = ">=
|
|
9
|
+
requires-python = ">=3.12,<4.0"
|
|
10
10
|
dependencies = [
|
|
11
11
|
"requests>=2.32.5",
|
|
12
12
|
"typer>=0.21.0",
|
|
@@ -38,6 +38,7 @@ dependencies = [
|
|
|
38
38
|
"pyyaml>=6.0",
|
|
39
39
|
"questionary>=2.0.0",
|
|
40
40
|
"llm-github-copilot>=0.3.1",
|
|
41
|
+
"llm-mistral (>=0.15,<0.16)",
|
|
41
42
|
]
|
|
42
43
|
|
|
43
44
|
[project.scripts]
|
|
@@ -64,6 +65,6 @@ line-length = 78
|
|
|
64
65
|
dev = [
|
|
65
66
|
"pytest (>=9.0.2,<10.0.0)",
|
|
66
67
|
"pytest-cov (>=7.0.0,<8.0.0)",
|
|
67
|
-
"black
|
|
68
|
+
"black>=25.12.0,<27.0.0",
|
|
68
69
|
"mypy (>=1.19.1,<2.0.0)"
|
|
69
70
|
]
|
|
@@ -3,7 +3,7 @@ Scholar package for structured literature searches.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from .scholar import Search, SearchResult, Paper, SearchFilters
|
|
6
|
-
from .scholar import search, filter_papers
|
|
6
|
+
from .scholar import search, filter_papers, deduplicate_papers
|
|
7
7
|
from .scholar import get_registry, isolated_registry
|
|
8
8
|
from .utils import safe_get_nested, ensure_list
|
|
9
9
|
|
|
@@ -14,6 +14,7 @@ __all__ = [
|
|
|
14
14
|
"SearchFilters",
|
|
15
15
|
"search",
|
|
16
16
|
"filter_papers",
|
|
17
|
+
"deduplicate_papers",
|
|
17
18
|
"get_registry",
|
|
18
19
|
"isolated_registry",
|
|
19
20
|
"safe_get_nested",
|