import os, json, datetime, threading, requests from typing import List, Dict, Any import gradio as gr import gspread from google.oauth2.service_account import Credentials ENDPOINT_ID = os.getenv("ENDPOINT_ID") HF_TOKEN = os.getenv("HF_TOKEN") if not ENDPOINT_ID: raise ValueError("ENDPOINT_ID is not set") def _call_endpoint(payload: Dict[str, Any]) -> Dict[str, Any]: headers = {"Accept": "application/json", "Content-Type": "application/json"} if HF_TOKEN: headers["Authorization"] = f"Bearer {HF_TOKEN}" r = requests.post(ENDPOINT_ID, json=payload, headers=headers, timeout=60) r.raise_for_status() return r.json() def _call_leansearch(query: str, k: int) -> List[Dict[str, Any]]: payload = {"query": [query], "num_results": str(k)} r = requests.post("https://leansearch.net/search", json=payload, timeout=60) r.raise_for_status() data = r.json() return data[0] if isinstance(data, list) and data else [] # Google Sheets setup SERVICE_ACCOUNT_INFO = os.getenv("GCP_SERVICE_ACCOUNT_JSON") if not SERVICE_ACCOUNT_INFO: raise ValueError("Missing GCP_SERVICE_ACCOUNT_JSON env var") SCOPES = [ "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive", ] credentials = Credentials.from_service_account_info( json.loads(SERVICE_ACCOUNT_INFO), scopes=SCOPES ) gc = gspread.authorize(credentials) worksheet = gc.open("arena_votes").sheet1 SHEET_LOCK = threading.Lock() def _save_vote(choice: str, query: str, lf_json: Dict[str, Any], ls_json: List[Dict[str, Any]]) -> str: """Append one row: timestamp | query | choice | results_json""" if not choice: return "⚠️ Please pick a system before submitting." payload = { "lean_finder": lf_json, "lean_search": ls_json, } row = [ datetime.datetime.utcnow().isoformat(timespec="seconds"), query, choice, json.dumps(payload, ensure_ascii=False), ] with SHEET_LOCK: worksheet.append_row(row, value_input_option="RAW") return "✅ Vote recorded — thanks!" # Rendering contents def _render_leanfinder(res: List[Dict[str, Any]]) -> str: if not res: return "
No results from Lean Finder.
" rows = "\n".join( f"{r['formal_statement']}
Rank | Score | " "Formal statement | Informal statement |
---|
No results from LeanSearch.
" def row(i: int, e: Dict[str, Any]) -> str: r = e.get("result", {}) kind, name = r.get("kind","").strip(), ".".join(r.get("name", [])) sig, val = r.get("signature", ""), r.get("value","").lstrip() dist = e.get("distance", 0.0) formal = f"{kind} {name}{sig} {val}".strip() return (f"{formal}
Rank | Distance | " "Formal statement | Informal statement |
---|
Please enter a query.
"), query, {}, [] payload = {"inputs": query, "top_k": k} lf_json = _call_endpoint(payload).get("results", []) lf_html = _render_leanfinder(lf_json) if mode == "Normal": return lf_html, query, lf_json, [] # ls_json empty # Arena: get LeanSearch as well ls_json = _call_leansearch(query, k) ls_html = _render_leansearch(ls_json) html = ( "