ClergeF's picture
Update app.py
bd545c2 verified
import json
import numpy as np
from fastapi import FastAPI
from pydantic import BaseModel
from huggingface_hub import hf_hub_download
from sentence_transformers import SentenceTransformer
HF_USER = "ClergeF"
IMPACT_REPO = "impact-model"
IMPACT_FILE = "impact.json"
print("Loading embedder: all-MiniLM-L6-v2 …")
embedder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
def embed(text: str):
return embedder.encode([text])[0]
def load_model():
print(f"Loading {IMPACT_REPO}/{IMPACT_FILE}")
path = hf_hub_download(
repo_id=f"{HF_USER}/{IMPACT_REPO}",
filename=IMPACT_FILE
)
with open(path, "r") as f:
data = json.load(f)
# 🔥 REMOVE unwanted fields BEFORE storing the model
data.pop("matched_keyword", None)
return data
def linear_predict(model_json, vec):
coef = np.array(model_json["coef"])
intercept = np.array(model_json["intercept"])
return float(np.dot(coef, vec) + intercept)
print("Loading impact model...")
impact_model = load_model()
print("✔ Impact model loaded!")
app = FastAPI(title="Impact Rating API")
class InputText(BaseModel):
text: str
@app.get("/")
def home():
return {"status": "ok", "message": "Impact API running"}
@app.post("/rate")
def rate(payload: InputText):
text = payload.text
vec = embed(text)
score = linear_predict(impact_model, vec)
return {
"input": text,
"result": {
"impact_score": score # 🔥 cleaned output (NO matched_keyword)
}
}