import joblib import numpy as np import os from sentence_transformers import SentenceTransformer # Load trained model once at module import CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) BACKEND_DIR = os.path.abspath(os.path.join(CURRENT_DIR, "..")) MODEL_DIR = os.path.join(BACKEND_DIR, "models", "intent_classification") classifier = joblib.load(os.path.join(MODEL_DIR, "intent_model2.pkl")) id_to_label = joblib.load(os.path.join(MODEL_DIR, "id_to_label2.pkl")) # Load model directly from HuggingFace embedder = SentenceTransformer("all-MiniLM-L6-v2") CONFIDENCE_THRESHOLD = 0.55 def classify_intent(text): embedding = embedder.encode([text]) probs = classifier.predict_proba(embedding)[0] pred_idx = np.argmax(probs) confidence = float(probs[pred_idx]) label = id_to_label[pred_idx] if confidence < CONFIDENCE_THRESHOLD: return { "status": "UNCERTAIN", "label": label, "confidence": confidence } return { "status": "READY", "label": label, "confidence": confidence }