Spaces:
Running on Zero
Running on Zero
File size: 1,459 Bytes
71e6ce1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | """
predict.py
==========
The single public entrypoint used by app.py. Everything else in src/ is
plumbing — this is the one function a Streamlit UI (or any other frontend)
needs to call.
"""
from typing import List, Dict
from .inference import predict_all_models
from .ensemble import rank_ensemble_with_scores
from .config import LEADERBOARD_SCORES
def predict(prompt: str, options: List[str]) -> Dict:
"""
Full pipeline: run all 4 models -> ensemble -> return everything the UI
needs to render (final answer, per-model breakdown, confidence scores).
Args:
prompt: the question text
options: list of 5 option strings, in A, B, C, D, E order
Returns:
{
"final_top3": ["B", "A", "D"],
"per_model_top3": {
"tfidf": [...], "lstm": [...], "deberta": [...], "roberta": [...]
},
"ensemble_scores": {"B": 0.62, "A": 0.41, ...},
"leaderboard_scores": {...} # for display / transparency
}
"""
if len(options) != 5:
raise ValueError(f"Expected exactly 5 options (A-E), got {len(options)}")
per_model_top3 = predict_all_models(prompt, options)
final_top3, ensemble_scores = rank_ensemble_with_scores(per_model_top3)
return {
"final_top3": final_top3,
"per_model_top3": per_model_top3,
"ensemble_scores": ensemble_scores,
"leaderboard_scores": LEADERBOARD_SCORES,
} |