Source code for tooluniverse.fatcat_tool

import requests
from .base_tool import BaseTool
from .tool_registry import register_tool


[docs] @register_tool("FatcatScholarTool") class FatcatScholarTool(BaseTool): """ Search Internet Archive Scholar via Fatcat releases search. Parameters (arguments): query (str): Query string max_results (int): Max results (default 10, max 100) """
[docs] def __init__(self, tool_config): super().__init__(tool_config) self.base_url = "https://api.fatcat.wiki/v0/release/search"
[docs] def run(self, arguments=None): arguments = arguments or {} query = arguments.get("query") max_results = int(arguments.get("max_results", 10)) if not query: return {"error": "`query` parameter is required."} params = { "q": query, "size": max(1, min(max_results, 100)), } try: resp = requests.get(self.base_url, params=params, timeout=20) resp.raise_for_status() data = resp.json() except requests.RequestException as e: return { "error": "Network/API error calling Fatcat", "reason": str(e), } except ValueError: return {"error": "Failed to decode Fatcat response as JSON"} results = [] for r in data.get("hits", {}).get("hits", []): src = r.get("_source", {}) title = src.get("title") year = src.get("release_year") doi = src.get("doi") authors = src.get("contrib_names", []) url = None if src.get("wikidata_qid"): url = f"https://fatcat.wiki/release/{src.get('ident') or ''}" results.append( { "title": title, "authors": authors, "year": year, "doi": doi, "url": url, "source": "Fatcat/IA Scholar", } ) return results