academia-mcp 1.2.0__py3-none-any.whl → 1.2.2__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,4 +1,5 @@
1
1
  import os
2
+ import json
2
3
  from typing import List, Any, Dict
3
4
  from dotenv import load_dotenv
4
5
 
@@ -38,7 +39,7 @@ ChatMessages = List[ChatMessage]
38
39
 
39
40
 
40
41
  async def document_qa(
41
- document: str,
42
+ document: str | Dict[str, Any],
42
43
  question: str,
43
44
  ) -> str:
44
45
  """
@@ -55,10 +56,13 @@ async def document_qa(
55
56
  Returns an answer to all questions based on the document content.
56
57
 
57
58
  Args:
58
- question: Question (or questions) to be answered about the document.
59
- document: The full text of the document to analyze.
59
+ question: Question (or questions) to be answered about the document.
60
+ document: The full text of the document to analyze.
60
61
  """
61
62
  assert question and question.strip(), "Please provide non-empty 'question'"
63
+ if isinstance(document, dict):
64
+ document = json.dumps(document)
65
+
62
66
  assert document and document.strip(), "Please provide non-empty 'document'"
63
67
 
64
68
  model_name = os.getenv("DOCUMENT_QA_MODEL_NAME", "deepseek/deepseek-chat-v3-0324")
@@ -28,16 +28,31 @@ def web_search(
28
28
  limit: The maximum number of items to return. 20 by default, maximum 25.
29
29
  provider: The provider to use. "exa", "tavily" or "brave". "tavily" by default.
30
30
  """
31
- assert provider in (
32
- "exa",
33
- "tavily",
34
- "brave",
35
- ), "Error: provider must be either 'exa', 'tavily' or 'brave'"
31
+ providers = ("tavily", "brave", "exa")
32
+ assert provider in providers, "Error: provider must be either 'exa', 'tavily' or 'brave'"
33
+
34
+ is_tavily_available = os.getenv("TAVILY_API_KEY") is not None
35
+ is_exa_available = os.getenv("EXA_API_KEY") is not None
36
+ is_brave_available = os.getenv("BRAVE_API_KEY") is not None
37
+ assert is_tavily_available or is_exa_available or is_brave_available
38
+ availability = {
39
+ "tavily": is_tavily_available,
40
+ "brave": is_brave_available,
41
+ "exa": is_exa_available,
42
+ }
43
+
44
+ if not availability[provider]:
45
+ for p in providers:
46
+ if availability[p]:
47
+ provider = p
48
+ break
36
49
 
37
50
  if provider == "exa":
38
51
  return exa_web_search(query, limit)
39
- if provider == "brave":
52
+ elif provider == "brave":
40
53
  return brave_web_search(query, limit)
54
+
55
+ assert provider == "tavily"
41
56
  return tavily_web_search(query, limit)
42
57
 
43
58
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: academia-mcp
3
- Version: 1.2.0
3
+ Version: 1.2.2
4
4
  Summary: MCP server that provides different tools to search for scientific publications
5
5
  Author-email: Ilya Gusev <phoenixilya@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/IlyaGusev/academia_mcp
@@ -10,16 +10,16 @@ academia_mcp/tools/anthology_search.py,sha256=_5s8EzdV7NQD_F3bjVH4XlKKHOJlFtWlQV
10
10
  academia_mcp/tools/arxiv_download.py,sha256=xanzt77TZBQRngzGbKCRz4Hp-Mwfe_q-46eRW23TpVs,11219
11
11
  academia_mcp/tools/arxiv_search.py,sha256=pzM18qrF3QL03A53w003kE7hQi3s3QKtjgw0m7K88UY,8355
12
12
  academia_mcp/tools/bitflip.py,sha256=u0hSOPWbnCDu2EbA_RkueX496SvTKz9QhZcXugshSfI,10949
13
- academia_mcp/tools/document_qa.py,sha256=Z51X_rm9p53SltKQJeN0-1CDrCefiYujap1vZZ88uU8,2132
13
+ academia_mcp/tools/document_qa.py,sha256=lWtzRNFKwQpQO8vPNvYYbNnGh3LsBmGl6f9vSRIuqaw,2245
14
14
  academia_mcp/tools/hf_datasets_search.py,sha256=KiBkqT4rXjEN4oc1AWZOPnqN_Go90TQogY5-DUm3LQo,2854
15
15
  academia_mcp/tools/md_to_pdf.py,sha256=Ovc_-8j7gIZNEM1d0ZDH-8qbtfZLSaNmCm5DQjrtM0k,12810
16
16
  academia_mcp/tools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  academia_mcp/tools/s2_citations.py,sha256=dqrBp76RrX1zH2XzcMAoWBbvbtyhxLeF-xnqOKD_JiM,4852
18
18
  academia_mcp/tools/visit_webpage.py,sha256=0zAZYeQxPDu0OjgAAvbMLZh0ttaS5q-_4WhgsEPrbsI,1542
19
- academia_mcp/tools/web_search.py,sha256=NAkbXdD9mKxsIXhWN32dRd_EiaB3G6ENy-n-bc7HAaQ,5448
20
- academia_mcp-1.2.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
21
- academia_mcp-1.2.0.dist-info/METADATA,sha256=bVlYEucMW7togYS7J-nwq609Qx-MFCSx8vADvucSvvo,1899
22
- academia_mcp-1.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
23
- academia_mcp-1.2.0.dist-info/entry_points.txt,sha256=gxkiKJ74w2FwJpSECpjA3XtCfI5ZfrM6N8cqnwsq4yY,51
24
- academia_mcp-1.2.0.dist-info/top_level.txt,sha256=CzGpRFsRRJRqWEb1e3SUlcfGqRzOxevZGaJWrtGF8W0,13
25
- academia_mcp-1.2.0.dist-info/RECORD,,
19
+ academia_mcp/tools/web_search.py,sha256=P74HF5agF-cWOGUYmrDcr_R-Ay3xz9fNdhFov8vtt9o,6025
20
+ academia_mcp-1.2.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
21
+ academia_mcp-1.2.2.dist-info/METADATA,sha256=SC1JQUbH4sbFFZFcuTeC-iwEVIhMbQqXlSL2sB6riqM,1899
22
+ academia_mcp-1.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
23
+ academia_mcp-1.2.2.dist-info/entry_points.txt,sha256=gxkiKJ74w2FwJpSECpjA3XtCfI5ZfrM6N8cqnwsq4yY,51
24
+ academia_mcp-1.2.2.dist-info/top_level.txt,sha256=CzGpRFsRRJRqWEb1e3SUlcfGqRzOxevZGaJWrtGF8W0,13
25
+ academia_mcp-1.2.2.dist-info/RECORD,,