WaterScopeAI-Search / retrieval_tools.py
starfriend's picture
Upload 7 files
4f6fcea verified
Raw History Blame Contribute Delete
2.46 kB
"""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()