api / app.py
Aroojzahra908's picture
Update app.py
cd251cc verified
Raw
History Blame Contribute Delete
1.95 kB
import os
# ✅ Disable xet backend (fix permission error)
os.environ["HF_HUB_DISABLE_XET"] = "1"
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
import torch
import torch.nn.functional as F
from transformers import XLMRobertaTokenizer, XLMRobertaForSequenceClassification
from huggingface_hub import hf_hub_download
# Hugging Face repo + file
REPO_ID = "Aroojzahra908/model"
FILENAME = "xlmr_depression_classifier.pt"
MODEL_NAME = "xlm-roberta-base"
# Download model file from Hugging Face Hub
model_path = hf_hub_download(repo_id=REPO_ID, filename=FILENAME, cache_dir="/tmp")
# Hugging Face repo + file
REPO_ID = "Aroojzahra908/model" # your HF repo
FILENAME = "xlmr_depression_classifier.pt"
MODEL_NAME = "xlm-roberta-base"
# Download model file from Hugging Face Hub
model_path = hf_hub_download(repo_id=REPO_ID, filename=FILENAME, cache_dir="/tmp")
# Load tokenizer
tokenizer = XLMRobertaTokenizer.from_pretrained(MODEL_NAME)
# Load model architecture
model = XLMRobertaForSequenceClassification.from_pretrained(MODEL_NAME, num_labels=2)
# Load trained weights
state_dict = torch.load(model_path, map_location="cpu")
model.load_state_dict(state_dict, strict=False)
model.eval()
# FastAPI app
app = FastAPI()
# Input schema
class InputText(BaseModel):
text: str
@app.post("/predict")
def predict(data: InputText):
inputs = tokenizer(
data.text,
return_tensors="pt",
truncation=True,
padding=True,
max_length=128
)
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
probs = F.softmax(logits, dim=1)
pred = torch.argmax(probs, dim=1).item()
label = "Depressed" if pred == 1 else "Non-Depressed"
return {"prediction": label}
# ✅ Main entry point
if __name__ == "__main__":
port = int(os.environ.get("PORT", 7860))
uvicorn.run("app:app", host="0.0.0.0", port=port, reload=False)