Spaces:
Sleeping
Sleeping
File size: 2,460 Bytes
881aff7 4f6fcea 881aff7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | """Bibliographic search and summary context for the WaterScope HF Space."""
from __future__ import annotations
import json
import os
from pathlib import Path
_ROOT = Path(__file__).resolve().parent
def _configure_paths() -> None:
os.environ.setdefault("PAPER_CSV", str(_ROOT / "metadata_search" / "data" / "papers.csv"))
os.environ.setdefault("METADATA_QDRANT_PATH", str(_ROOT / "metadata_search_data" / "qdrant"))
os.environ.setdefault("LOCAL_RAG_DATA_DIR", str(_ROOT / "local_rag_data"))
os.environ.setdefault("PAPER_SUMMARIES_DIR", str(_ROOT / "paper_summaries"))
os.environ.setdefault("METADATA_SEMANTIC_SEARCH", os.getenv("METADATA_SEMANTIC_SEARCH", "1"))
os.environ.setdefault("METADATA_AUTO_REBUILD", "0")
_configure_paths()
from mcp_tools.local_rag_tools import build_paper_context_tool
from mcp_tools.metadata_tools import search_metadata_tool, select_papers_from_search_tool
def search_papers(
query: str,
top_k: int = 10,
year_from: int | None = None,
year_to: int | None = None,
) -> dict:
return json.loads(
search_metadata_tool(
query,
top_k=top_k,
year_from=year_from,
year_to=year_to,
)
)
def select_papers(
query: str,
ranks: list[int],
top_k: int = 10,
year_from: int | None = None,
year_to: int | None = None,
) -> dict:
return json.loads(
select_papers_from_search_tool(
query,
ranks,
top_k=top_k,
year_from=year_from,
year_to=year_to,
)
)
def build_context(document_ids: list[str], question: str = "") -> dict:
return json.loads(build_paper_context_tool(document_ids, question=question))
def format_search_results(payload: dict) -> str:
lines: list[str] = []
for row in payload.get("results", []):
authors = (row.get("authors_display") or row.get("authors") or "").strip()
lines.append(f"{row.get('rank')}. {row.get('title')} ({row.get('year', 'n.d.')})")
if authors:
lines.append(f" {authors}")
abstract = (row.get("abstract") or "").strip()
if abstract:
lines.append(f" {abstract[:220]}{'…' if len(abstract) > 220 else ''}")
lines.append("")
if not lines:
return "No papers matched that query."
mode = payload.get("score_mode", "rrf")
return f"Score mode: {mode}\n\n" + "\n".join(lines).strip()
|