Trifecta-Lab / src /hf_mcp_server.py
Brettapps's picture
Upload folder using huggingface_hub (part 21)
e23172f verified
Raw History Blame Contribute Delete
1.88 kB
"""HF Space MCP server for Trifecta Pro predictions."""
from __future__ import annotations
import json
from pathlib import Path
from typing import Any
from .prediction_model import Race, Runner, TrifectaPredictor
def load_predictions(date: str) -> dict[str, Any]:
path = Path(__file__).resolve().parents[1] / "data" / "predictions" / f"predictions-{date}.json"
if not path.exists():
return {"error": f"No predictions for {date}", "path": str(path)}
return json.loads(path.read_text())
def list_pdfs() -> dict[str, Any]:
pdf_dir = Path(__file__).resolve().parents[1] / "data" / "pdfs"
pdfs = sorted([p.name for p in pdf_dir.glob("*.pdf")]) if pdf_dir.exists() else []
return {"pdfs": pdfs}
class HFMCPServer:
def __init__(self, space_name: str = "Brettapps/trifecta-bro", access_token: str | None = None) -> None:
self.space_name = space_name
self.access_token = access_token
self.predictor = TrifectaPredictor()
def get_latest_predictions(self, date: str | None = None) -> dict[str, Any]:
if not date:
from datetime import date as d, timedelta
date = (d.today() + timedelta(days=1)).isoformat()
return load_predictions(date)
def get_pdf_list(self) -> dict[str, Any]:
return list_pdfs()
def download_pdf(self, pdf_name: str) -> dict[str, Any]:
pdf_dir = Path(__file__).resolve().parents[1] / "data" / "pdfs"
path = pdf_dir / pdf_name
if not path.exists():
return {"error": f"PDF not found: {pdf_name}"}
return {"path": str(path), "name": pdf_name}
def get_space_status(self) -> dict[str, Any]:
return {
"space": self.space_name,
"status": "ok",
"predictor": "trifecta-model-v1",
}
def create_mcp_server() -> HFMCPServer:
return HFMCPServer()