Spaces:
Sleeping
Sleeping
from pathlib import Path | |
import torch | |
import torch.nn.functional as F | |
from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
import os | |
# Set a custom cache directory to avoid permission issues | |
os.environ["HF_HOME"] = "/tmp/huggingface_cache" | |
os.environ["TRANSFORMERS_CACHE"] = "/tmp/huggingface_cache" | |
# Set Hugging Face token for private repository (if applicable) | |
hf_token = os.environ.get("HF_TOKEN", None) | |
# Define the repository ID | |
repo_id = "milanchndr/email-classification-model" | |
# Load the model and tokenizer | |
try: | |
model = AutoModelForSequenceClassification.from_pretrained( | |
repo_id, | |
cache_dir="/tmp/huggingface_cache", | |
use_auth_token=hf_token | |
) | |
tokenizer = AutoTokenizer.from_pretrained( | |
repo_id, | |
cache_dir="/tmp/huggingface_cache", | |
use_auth_token=hf_token | |
) | |
print("Model and tokenizer loaded successfully!") | |
except Exception as e: | |
print(f"Error loading model or tokenizer: {e}") | |
exit() | |
# Set model to evaluation mode | |
model.eval() | |
model.eval() | |
label_map = {0: "Incident", 1: "Request", 2: "Change", 3: "Problem"} | |
def classify_email(email: str) -> str: | |
"""Classify an email into a support category using a fine-tuned model. | |
Args: | |
email (str): The email text to classify. | |
Returns: | |
str: The predicted category (Incident, Request, Change, or Problem). | |
""" | |
inputs = tokenizer( | |
email, padding=True, truncation=True, max_length=512, return_tensors="pt" | |
) | |
with torch.no_grad(): | |
outputs = model(**inputs) | |
probs = F.softmax(outputs.logits, dim=1) | |
pred = torch.argmax(probs, dim=1).item() | |
return label_map[pred] | |