Download src/api/services.py from devrup404/SignalMod: direct link, hf CLI and curl.
- Browser
- Download file 1.46 kB
-
https://huggingface.co/spaces/devrup404/SignalMod/resolve/21e8095f146314dd87fce3a1f63b090cf54ec99d/src/api/services.py
- Command line
-
hf download hf://spaces/devrup404/SignalMod@21e8095f146314dd87fce3a1f63b090cf54ec99d/src/api/services.py
-
curl -L -o services.py https://huggingface.co/spaces/devrup404/SignalMod/resolve/21e8095f146314dd87fce3a1f63b090cf54ec99d/src/api/services.py
1.46 kB
| """Prediction helpers used by route handlers.""" | |
| from __future__ import annotations | |
| import time | |
| from fastapi import HTTPException | |
| from src.api.schemas import PredictResponse | |
| from src.api.state import get_state | |
| from src.service.model_service import ModelService | |
| def get_service() -> ModelService: | |
| state = get_state() | |
| if state["service"] is None: | |
| raise HTTPException(status_code=503, detail="Model not loaded. Try again shortly.") | |
| return state["service"] | |
| def to_predict_response(text: str, result: dict, latency_ms: float, threshold: float) -> PredictResponse: | |
| proba = float(result["probability"]) | |
| is_toxic = proba >= threshold | |
| labels = result.get("labels", []) if is_toxic else [] | |
| return PredictResponse( | |
| text=text, | |
| is_toxic=is_toxic, | |
| probability=round(proba, 4), | |
| status="Toxic" if is_toxic else "Safe", | |
| mode="binary", | |
| labels=labels, | |
| model_used=result.get("model_used", ""), | |
| latency_ms=latency_ms, | |
| ) | |
| def predict_single(text: str, threshold: float) -> PredictResponse: | |
| state = get_state() | |
| t0 = time.perf_counter() | |
| result = get_service().predict(text) | |
| ms = round((time.perf_counter() - t0) * 1000, 2) | |
| if "error" in result: | |
| raise HTTPException(status_code=500, detail=result["error"]) | |
| state["predictions_served"] = state.get("predictions_served", 0) + 1 | |
| return to_predict_response(text, result, ms, threshold) | |