academic-refchecker 2.0.6__py3-none-any.whl → 2.0.8__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.6
3
+ Version: 2.0.8
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
@@ -315,6 +315,8 @@ python run_refchecker.py --paper https://arxiv.org/abs/1706.03762 \
315
315
 
316
316
  #### Google Gemini
317
317
 
318
+ With `GOOGLE_API_KEY` environment variable:
319
+
318
320
  ```bash
319
321
  python run_refchecker.py --paper paper.tex \
320
322
  --llm-provider google \
@@ -323,6 +325,8 @@ python run_refchecker.py --paper paper.tex \
323
325
 
324
326
  #### Azure OpenAI
325
327
 
328
+ With `AZURE_OPENAI_API_KEY` environment variable:
329
+
326
330
  ```bash
327
331
  python run_refchecker.py --paper paper.txt \
328
332
  --llm-provider azure \
@@ -1,12 +1,12 @@
1
- academic_refchecker-2.0.6.dist-info/licenses/LICENSE,sha256=Kwrx3fePVCeEFDCZvCW4OuoTNBiSoYbpGBI6qzGhWF0,1067
1
+ academic_refchecker-2.0.8.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
6
  backend/database.py,sha256=1jLP1m9vNk5sEs4bh_xmX0T5ilZkUTX1c7nOVz5XnNc,30681
7
- backend/main.py,sha256=ntz5PbEfG65ENFTHVQlY-c8hP5UPM_hdFjl60YMNh78,54371
7
+ backend/main.py,sha256=2ziCLwEmvPPtSiF6nuh2az2Lqg8JI9PytKWiow1V-4M,54586
8
8
  backend/models.py,sha256=El2F-RTHgxQ7-WODmiYCpjsTFDpjwF9PBt-JDa_XipE,2591
9
- backend/refchecker_wrapper.py,sha256=cgJpPFNGAKHaNKxnLY3r3RxlJVT-yRyr3rJFeMxoxAo,51873
9
+ backend/refchecker_wrapper.py,sha256=ZOg5Rc0Mgac3ALwxA55pTCeqCL06AWOBZLQeTeZEJcY,52038
10
10
  backend/thumbnail.py,sha256=wPFXp3RlmcL9jVKZmSBRB7Pfy9Ti7nCnzNtL4osfNtM,17618
11
11
  backend/websocket_manager.py,sha256=l-Wou-rKV6n7t6Gcf5fR6s_4G-mssSrba0davNnYS70,4247
12
12
  backend/static/favicon.svg,sha256=R0oQauh16Uy0D7JlT27k-zdjJtrvfPKOe9La5vKYwuM,395
@@ -16,7 +16,7 @@ backend/static/assets/index-2P6L_39v.css,sha256=KC3Wa6jfD1qwmEoVpqTovlzf8fsn5oHY
16
16
  backend/static/assets/index-hk21nqxR.js,sha256=z2agP8ZFYw4AfYi-GJ5E_8_k-lPF-frXOJtPk-I0hDs,369533
17
17
  refchecker/__init__.py,sha256=Pg5MrtLxDBRcNYcI02N-bv3tzURVd1S3nQ8IyF7Zw7E,322
18
18
  refchecker/__main__.py,sha256=agBbT9iKN0g2xXtRNCoh29Nr7z2n5vU-r0MCVJKi4tI,232
19
- refchecker/__version__.py,sha256=CGky8AGkCzeF_Tnz2l5iy3VNqdXB4RW5v_c6R530YHQ,65
19
+ refchecker/__version__.py,sha256=Zjb1PH2--VphovcG6srpeLZmZ4Kukc7voiH8Phuvx7c,65
20
20
  refchecker/checkers/__init__.py,sha256=T0PAHTFt6UiGvn-WGoJU8CdhXNmf6zaHmcGVoWHhmJQ,533
21
21
  refchecker/checkers/crossref.py,sha256=88moAyTudBqf9SKqTQkNAq1yyuRe95f8r4EpmJznupQ,20937
22
22
  refchecker/checkers/enhanced_hybrid_checker.py,sha256=2jIeUX7hankPok3M4de9o2bsJZ17ZomuLkdfdr9EV0s,28671
@@ -57,8 +57,8 @@ refchecker/utils/mock_objects.py,sha256=QxU-UXyHSY27IZYN8Sb8ei0JtNkpGSdMXoErrRLH
57
57
  refchecker/utils/text_utils.py,sha256=v5beDt_fyx4ETfTXLYrDMp3CuUGoDoLs7-d1H2GdySE,228585
58
58
  refchecker/utils/unicode_utils.py,sha256=-WBKarXO756p7fd7gCeNsMag4ztDNURwFX5IVniOtwY,10366
59
59
  refchecker/utils/url_utils.py,sha256=7b0rWCQJSajzqOvD7ghsBZPejiq6mUIz6SGhvU_WGDs,9441
60
- academic_refchecker-2.0.6.dist-info/METADATA,sha256=AIu2xVLiXrCNrsDXDR26o9lu3xnq1qSIL095DInxwGQ,26477
61
- academic_refchecker-2.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
62
- academic_refchecker-2.0.6.dist-info/entry_points.txt,sha256=9cREsaKwlp05Ql0CBIjKrNHk5IG2cHY5LvJPsV2-SxA,108
63
- academic_refchecker-2.0.6.dist-info/top_level.txt,sha256=FfNvrvpj25gfpUBjW0epvz7Qrdejhups5Za_DBiSRu4,19
64
- academic_refchecker-2.0.6.dist-info/RECORD,,
60
+ academic_refchecker-2.0.8.dist-info/METADATA,sha256=-hTJhL3BwqS2hvFrvt3AKnNqIncD9wU3ltrJxdsK1F0,26575
61
+ academic_refchecker-2.0.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
62
+ academic_refchecker-2.0.8.dist-info/entry_points.txt,sha256=9cREsaKwlp05Ql0CBIjKrNHk5IG2cHY5LvJPsV2-SxA,108
63
+ academic_refchecker-2.0.8.dist-info/top_level.txt,sha256=FfNvrvpj25gfpUBjW0epvz7Qrdejhups5Za_DBiSRu4,19
64
+ academic_refchecker-2.0.8.dist-info/RECORD,,
backend/main.py CHANGED
@@ -183,10 +183,12 @@ async def start_check(
183
183
 
184
184
  # Retrieve API key from config if config_id provided
185
185
  api_key = None
186
+ endpoint = None
186
187
  if llm_config_id and use_llm:
187
188
  config = await db.get_llm_config_by_id(llm_config_id)
188
189
  if config:
189
190
  api_key = config.get('api_key')
191
+ endpoint = config.get('endpoint')
190
192
  llm_provider = config.get('provider', llm_provider)
191
193
  llm_model = config.get('model') or llm_model
192
194
  logger.info(f"Using LLM config {llm_config_id}: {llm_provider}/{llm_model}")
@@ -238,7 +240,7 @@ async def start_check(
238
240
  # Start check in background
239
241
  cancel_event = asyncio.Event()
240
242
  task = asyncio.create_task(
241
- run_check(session_id, check_id, paper_source, source_type, llm_provider, llm_model, api_key, use_llm, cancel_event)
243
+ run_check(session_id, check_id, paper_source, source_type, llm_provider, llm_model, api_key, endpoint, use_llm, cancel_event)
242
244
  )
243
245
  active_checks[session_id] = {"task": task, "cancel_event": cancel_event, "check_id": check_id}
244
246
 
@@ -262,6 +264,7 @@ async def run_check(
262
264
  llm_provider: str,
263
265
  llm_model: Optional[str],
264
266
  api_key: Optional[str],
267
+ endpoint: Optional[str],
265
268
  use_llm: bool,
266
269
  cancel_event: asyncio.Event
267
270
  ):
@@ -349,6 +352,7 @@ async def run_check(
349
352
  llm_provider=llm_provider,
350
353
  llm_model=llm_model,
351
354
  api_key=api_key,
355
+ endpoint=endpoint,
352
356
  use_llm=use_llm,
353
357
  progress_callback=progress_callback,
354
358
  cancel_event=cancel_event,
@@ -829,6 +833,7 @@ async def recheck(check_id: int):
829
833
  llm_provider,
830
834
  llm_model,
831
835
  None, # API key will need to be retrieved separately
836
+ None, # Endpoint will need to be retrieved separately
832
837
  True,
833
838
  cancel_event
834
839
  )
@@ -82,6 +82,7 @@ class ProgressRefChecker:
82
82
  llm_provider: Optional[str] = None,
83
83
  llm_model: Optional[str] = None,
84
84
  api_key: Optional[str] = None,
85
+ endpoint: Optional[str] = None,
85
86
  use_llm: bool = True,
86
87
  progress_callback: Optional[Callable] = None,
87
88
  cancel_event: Optional[asyncio.Event] = None,
@@ -104,6 +105,7 @@ class ProgressRefChecker:
104
105
  self.llm_provider = llm_provider
105
106
  self.llm_model = llm_model
106
107
  self.api_key = api_key
108
+ self.endpoint = endpoint
107
109
  self.use_llm = use_llm
108
110
  self.progress_callback = progress_callback
109
111
  self.cancel_event = cancel_event
@@ -121,6 +123,8 @@ class ProgressRefChecker:
121
123
  llm_config['model'] = llm_model
122
124
  if api_key:
123
125
  llm_config['api_key'] = api_key
126
+ if endpoint:
127
+ llm_config['endpoint'] = endpoint
124
128
  self.llm = create_llm_provider(
125
129
  provider_name=llm_provider,
126
130
  config=llm_config
refchecker/__version__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """Version information for RefChecker."""
2
2
 
3
- __version__ = "2.0.6"
3
+ __version__ = "2.0.8"