linear / services /sms_service.py
tharu22's picture
message
563d648
raw
history blame
2.15 kB
# app/services/sms_service.py
import pickle
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from fastapi import HTTPException
from schemas.input_schemas import CosineSimilarityResponse
from schemas.input_schemas import EmbeddingResponse
# Load the trained model and vectorizer
def load_model():
model_path = "models/sms_classifier_model.pkl"
vectorizer_path = "models/tfidf_vectorizer.pkl"
try:
with open(model_path, 'rb') as f:
classifier = pickle.load(f)
with open(vectorizer_path, 'rb') as f:
vectorizer = pickle.load(f)
return classifier, vectorizer
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error loading model: {str(e)}")
async def predict_label(message: str):
try:
classifier, vectorizer = load_model()
# Vectorize the input message
message_vec = vectorizer.transform([message])
# Predict the label
label = classifier.predict(message_vec)[0]
return {"label": label}
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error predicting label: {str(e)}")
async def compute_cosine_similarity(text1: str, text2: str):
try:
classifier, vectorizer = load_model()
# Vectorize the input texts
vec1 = vectorizer.transform([text1]).toarray()
vec2 = vectorizer.transform([text2]).toarray()
# Compute cosine similarity
cosine_sim = np.dot(vec1, vec2.T) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))
return CosineSimilarityResponse(cosine_similarity=cosine_sim[0][0])
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error computing similarity: {str(e)}")
async def compute_embeddings(message: str):
try:
classifier, vectorizer = load_model()
# Vectorize the input message
embedding = vectorizer.transform([message]).toarray().tolist()
return EmbeddingResponse(embeddings=embedding)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error computing embeddings: {str(e)}")