# Imports import os from typing import Union from src.utils import preprocess from fastapi import FastAPI from transformers import AutoModelForSequenceClassification,AutoTokenizer, AutoConfig import numpy as np #convert logits to probabilities from scipy.special import softmax # Config app = FastAPI() #/docs, page to see auto-generated API documentation #loading ML/DL components os.environ['SENTENCE_TRANSFORMERS_HOME'] = './.cache' tokenizer = AutoTokenizer.from_pretrained('bert-base-cased') model_path = f"Junr-syl/tweet_sentiments_analysis" config = AutoConfig.from_pretrained(model_path) config.id2label = {0: 'NEGATIVE', 1: 'NEUTRAL', 2: 'POSITIVE'} model = AutoModelForSequenceClassification.from_pretrained(model_path) # Endpoints @app.get("/") def read_root(): "Home endpoint" return {"greeting": "Hello World..!", "cohort": "2", } @app.post("/predict") def predict(text:str): "prediction endpoint, classifying tweets" text = preprocess(text) # PyTorch-based models encoded_input = tokenizer(text, return_tensors='pt') output = model(**encoded_input) scores = output[0][0].detach().numpy() scores = softmax(scores) #Process scores ranking = np.argsort(scores) ranking = ranking[::-1] predicted_label = config.id2label[ranking[0]] predicted_score = scores[ranking[0]] return {"text":text, "predicted_label":predicted_label, "confidence_score":predicted_score }