Spaces:
Sleeping
Sleeping
| from huggingface_hub import hf_hub_download | |
| import torch | |
| from transformers import AutoModelForSequenceClassification as modelSC, AutoTokenizer as token | |
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| import os | |
| from typing import List | |
| app = FastAPI() | |
| os.environ["HF_HOME"] = "/tmp/huggingface" | |
| os.environ["TRANSFORMERS_CACHE"] = "/tmp/huggingface" | |
| os.makedirs(os.environ["HF_HOME"], exist_ok=True) | |
| model_path = hf_hub_download(repo_id="MienOlle/sentiment_analysis_api", | |
| filename="sentimentAnalysis.pth", | |
| cache_dir=os.environ["HF_HOME"] | |
| ) | |
| modelToken = token.from_pretrained("mdhugol/indonesia-bert-sentiment-classification", cache_dir=os.environ["TRANSFORMERS_CACHE"]) | |
| model = modelSC.from_pretrained("mdhugol/indonesia-bert-sentiment-classification", num_labels=3, cache_dir=os.environ["TRANSFORMERS_CACHE"]) | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| model.load_state_dict(torch.load(model_path, map_location=torch.device(device))) | |
| model.to(device) | |
| model.eval() | |
| class TextInput(BaseModel): | |
| text: List[str] | |
| def predict(input): | |
| inputs = modelToken(input, return_tensors="pt", padding=True, truncation=True, max_length=512) | |
| inputs = {key: tensor.to(device) for key, tensor in inputs.items()} | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| logits = outputs.logits | |
| rets = logits.argmax(dim = 1).tolist() | |
| labels = ["positive", "neutral", "negative"] | |
| return {[labels[ret] for ret in rets]} | |
| def get_sentiment(data: TextInput): | |
| return predict(data.text) | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) |