academia-mcp 1.6.5__tar.gz → 1.6.7__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.
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/PKG-INFO +1 -1
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/bitflip.py +7 -28
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp.egg-info/PKG-INFO +1 -1
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/pyproject.toml +1 -1
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_bitflip.py +16 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/LICENSE +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/README.md +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/__init__.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/__main__.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/files.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/latex_templates/agents4science_2025/agents4science_2025.sty +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/latex_templates/agents4science_2025/agents4science_2025.tex +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/llm.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/pdf.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/py.typed +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/server.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/__init__.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/anthology_search.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/arxiv_download.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/arxiv_search.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/document_qa.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/hf_datasets_search.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/latex.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/py.typed +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/review.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/s2_citations.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/visit_webpage.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/tools/web_search.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp/utils.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp.egg-info/SOURCES.txt +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp.egg-info/dependency_links.txt +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp.egg-info/entry_points.txt +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp.egg-info/requires.txt +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/academia_mcp.egg-info/top_level.txt +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/setup.cfg +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_anthology_search.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_arxiv_download.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_arxiv_search.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_document_qa.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_extract_json.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_hf_dataset_search.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_latex.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_review.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_s2_citations.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/tests/test_visit_webpage.py +0 -0
- {academia_mcp-1.6.5 → academia_mcp-1.6.7}/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.
|
3
|
+
Version: 1.6.7
|
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
|
@@ -161,28 +161,6 @@ class BitFlipInfo(BaseModel): # type: ignore
|
|
161
161
|
spark: str
|
162
162
|
|
163
163
|
|
164
|
-
class Proposal(BaseModel): # type: ignore
|
165
|
-
proposal_id: Optional[int] = None
|
166
|
-
flip: str
|
167
|
-
spark: str
|
168
|
-
abstract: str
|
169
|
-
experiments: List[str]
|
170
|
-
risks_and_limitations: List[str]
|
171
|
-
|
172
|
-
|
173
|
-
class ProposalScores(BaseModel): # type: ignore
|
174
|
-
proposal_id: int
|
175
|
-
spark: str
|
176
|
-
strengths: List[str]
|
177
|
-
weaknesses: List[str]
|
178
|
-
novelty: int
|
179
|
-
clarity: int
|
180
|
-
significance: int
|
181
|
-
feasibility: int
|
182
|
-
soundness: int
|
183
|
-
overall: int
|
184
|
-
|
185
|
-
|
186
164
|
async def extract_bitflip_info(arxiv_id: str) -> str:
|
187
165
|
"""
|
188
166
|
Extracts the Bit-Flip information from the arXiv paper.
|
@@ -244,12 +222,11 @@ async def generate_research_proposal(bit: str, additional_context: str = "") ->
|
|
244
222
|
model_name=model_name, messages=[ChatMessage(role="user", content=prompt)]
|
245
223
|
)
|
246
224
|
result = extract_json(content)
|
247
|
-
|
248
|
-
|
249
|
-
return str(proposal.model_dump_json())
|
225
|
+
result["proposal_id"] = random.randint(0, 1000000)
|
226
|
+
return json.dumps(result, ensure_ascii=False)
|
250
227
|
|
251
228
|
|
252
|
-
async def score_research_proposals(proposals: List[str | Dict[str, Any] | Any]) -> str:
|
229
|
+
async def score_research_proposals(proposals: str | List[str | Dict[str, Any] | Any]) -> str:
|
253
230
|
"""
|
254
231
|
Scores a list of research proposals.
|
255
232
|
Use proposals obtained with the `generate_research_proposal` tool.
|
@@ -276,10 +253,12 @@ async def score_research_proposals(proposals: List[str | Dict[str, Any] | Any])
|
|
276
253
|
proposals: A list of JSON strings with research proposals.
|
277
254
|
"""
|
278
255
|
model_name = os.getenv("BITFLIP_MODEL_NAME", "deepseek/deepseek-chat-v3-0324")
|
256
|
+
if isinstance(proposals, str):
|
257
|
+
proposals = json.loads(proposals)
|
258
|
+
assert isinstance(proposals, list), "Proposals should be a list of JSON strings"
|
279
259
|
prompt = encode_prompt(SCORE_PROMPT, proposals=[str(p) for p in proposals])
|
280
260
|
content = await llm_acall(
|
281
261
|
model_name=model_name, messages=[ChatMessage(role="user", content=prompt)]
|
282
262
|
)
|
283
263
|
scores = extract_json(content)
|
284
|
-
|
285
|
-
return json.dumps([s.model_dump() for s in final_scores], ensure_ascii=False)
|
264
|
+
return json.dumps(scores, ensure_ascii=False)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: academia-mcp
|
3
|
-
Version: 1.6.
|
3
|
+
Version: 1.6.7
|
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
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|