| from __future__ import annotations |
| from fastapi import APIRouter, Query, Body |
| from typing import Literal, List |
| from backend.services.hf_registry import REGISTRY |
| from backend.services.hf_client import run_sentiment |
|
|
| router = APIRouter(prefix="/api/hf", tags=["huggingface"]) |
|
|
|
|
| @router.get("/health") |
| async def hf_health(): |
| return REGISTRY.health() |
|
|
|
|
| @router.post("/refresh") |
| async def hf_refresh(): |
| return await REGISTRY.refresh() |
|
|
|
|
| @router.get("/registry") |
| async def hf_registry(kind: Literal["models","datasets"]="models"): |
| return {"kind": kind, "items": REGISTRY.list(kind)} |
|
|
|
|
| @router.get("/search") |
| async def hf_search(q: str = Query("crypto"), kind: Literal["models","datasets"]="models"): |
| hay = REGISTRY.list(kind) |
| ql = q.lower() |
| res = [x for x in hay if ql in (x.get("id","").lower() + " " + " ".join([str(t) for t in x.get("tags",[])]).lower())] |
| return {"query": q, "kind": kind, "count": len(res), "items": res[:50]} |
|
|
|
|
| @router.post("/run-sentiment") |
| async def hf_run_sentiment(texts: List[str] = Body(..., embed=True), model: str | None = Body(default=None)): |
| return run_sentiment(texts, model=model) |
|
|