academia-mcp 1.6.4__tar.gz → 1.6.6__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 (46) hide show
  1. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/PKG-INFO +1 -1
  2. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/bitflip.py +6 -3
  3. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp.egg-info/PKG-INFO +1 -1
  4. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/pyproject.toml +1 -1
  5. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_bitflip.py +16 -0
  6. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/LICENSE +0 -0
  7. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/README.md +0 -0
  8. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/__init__.py +0 -0
  9. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/__main__.py +0 -0
  10. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/files.py +0 -0
  11. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/latex_templates/agents4science_2025/agents4science_2025.sty +0 -0
  12. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/latex_templates/agents4science_2025/agents4science_2025.tex +0 -0
  13. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/llm.py +0 -0
  14. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/pdf.py +0 -0
  15. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/py.typed +0 -0
  16. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/server.py +0 -0
  17. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/__init__.py +0 -0
  18. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/anthology_search.py +0 -0
  19. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/arxiv_download.py +0 -0
  20. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/arxiv_search.py +0 -0
  21. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/document_qa.py +0 -0
  22. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/hf_datasets_search.py +0 -0
  23. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/latex.py +0 -0
  24. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/py.typed +0 -0
  25. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/review.py +0 -0
  26. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/s2_citations.py +0 -0
  27. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/visit_webpage.py +0 -0
  28. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/tools/web_search.py +0 -0
  29. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp/utils.py +0 -0
  30. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp.egg-info/SOURCES.txt +0 -0
  31. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp.egg-info/dependency_links.txt +0 -0
  32. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp.egg-info/entry_points.txt +0 -0
  33. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp.egg-info/requires.txt +0 -0
  34. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/academia_mcp.egg-info/top_level.txt +0 -0
  35. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/setup.cfg +0 -0
  36. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_anthology_search.py +0 -0
  37. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_arxiv_download.py +0 -0
  38. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_arxiv_search.py +0 -0
  39. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_document_qa.py +0 -0
  40. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_extract_json.py +0 -0
  41. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_hf_dataset_search.py +0 -0
  42. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_latex.py +0 -0
  43. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_review.py +0 -0
  44. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_s2_citations.py +0 -0
  45. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_visit_webpage.py +0 -0
  46. {academia_mcp-1.6.4 → academia_mcp-1.6.6}/tests/test_web_search.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: academia-mcp
3
- Version: 1.6.4
3
+ Version: 1.6.6
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
@@ -4,7 +4,7 @@
4
4
  import json
5
5
  import os
6
6
  import random
7
- from typing import List, Optional, Any
7
+ from typing import List, Optional, Any, Dict
8
8
 
9
9
  from pydantic import BaseModel
10
10
  from datasets import load_dataset # type: ignore
@@ -249,7 +249,7 @@ async def generate_research_proposal(bit: str, additional_context: str = "") ->
249
249
  return str(proposal.model_dump_json())
250
250
 
251
251
 
252
- async def score_research_proposals(proposals: List[str]) -> str:
252
+ async def score_research_proposals(proposals: str | List[str | Dict[str, Any] | Any]) -> str:
253
253
  """
254
254
  Scores a list of research proposals.
255
255
  Use proposals obtained with the `generate_research_proposal` tool.
@@ -276,7 +276,10 @@ async def score_research_proposals(proposals: List[str]) -> str:
276
276
  proposals: A list of JSON strings with research proposals.
277
277
  """
278
278
  model_name = os.getenv("BITFLIP_MODEL_NAME", "deepseek/deepseek-chat-v3-0324")
279
- prompt = encode_prompt(SCORE_PROMPT, proposals=proposals)
279
+ if isinstance(proposals, str):
280
+ proposals = json.loads(proposals)
281
+ assert isinstance(proposals, list), "Proposals should be a list of JSON strings"
282
+ prompt = encode_prompt(SCORE_PROMPT, proposals=[str(p) for p in proposals])
280
283
  content = await llm_acall(
281
284
  model_name=model_name, messages=[ChatMessage(role="user", content=prompt)]
282
285
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: academia-mcp
3
- Version: 1.6.4
3
+ Version: 1.6.6
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "academia-mcp"
7
- version = "1.6.4"
7
+ version = "1.6.6"
8
8
  description = "MCP server that provides different tools to search for scientific publications"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -36,3 +36,19 @@ async def test_bitflip_score_research_proposals() -> None:
36
36
  assert scores[1]["strengths"] is not None
37
37
  assert scores[0]["weaknesses"] is not None
38
38
  assert scores[1]["weaknesses"] is not None
39
+
40
+
41
+ async def test_bitflip_score_research_proposals_str() -> None:
42
+ arxiv_id = "2503.07826"
43
+ bit = json.loads(await extract_bitflip_info(arxiv_id))["bit"]
44
+ proposal1 = await generate_research_proposal(bit=bit)
45
+ proposal2 = await generate_research_proposal(bit=bit)
46
+ scores = json.loads(await score_research_proposals(json.dumps([proposal1, proposal2])))
47
+ assert scores
48
+ assert len(scores) == 2
49
+ assert scores[0]["spark"] is not None
50
+ assert scores[1]["spark"] is not None
51
+ assert scores[0]["strengths"] is not None
52
+ assert scores[1]["strengths"] is not None
53
+ assert scores[0]["weaknesses"] is not None
54
+ assert scores[1]["weaknesses"] is not None
File without changes
File without changes
File without changes