Satyam0077 commited on
Commit
681ecc1
·
verified ·
1 Parent(s): ccb623b

Update src/inference.py

Browse files
Files changed (1) hide show
  1. src/inference.py +37 -55
src/inference.py CHANGED
@@ -3,67 +3,49 @@ import numpy as np
3
  import joblib
4
  import scipy.sparse
5
  from textblob import TextBlob
 
 
 
 
6
 
7
  from src.preprocessing import clean_text
 
8
  from src.model import load_model
9
  from src.entity_extraction import extract_entities
10
 
11
- # Define path to models folder, adjust as needed
12
  BASE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "models"))
13
 
14
- # Load models and vectorizer safely with error handling
15
- try:
16
- model_issue = load_model(os.path.join(BASE_PATH, "model_issue_type.pkl"))
17
- model_urgency = load_model(os.path.join(BASE_PATH, "model_urgency_level.pkl"))
18
- tfidf = joblib.load(os.path.join(BASE_PATH, "tfidf.pkl"))
19
- except Exception as e:
20
- print(f"Error loading models or vectorizer: {e}")
21
- model_issue = None
22
- model_urgency = None
23
- tfidf = None
24
 
25
  def predict_ticket(ticket_text):
26
- if not all([model_issue, model_urgency, tfidf]):
27
- return {
28
- "issue_type": "Model not loaded",
29
- "urgency_level": "Model not loaded",
30
- "entities": {}
31
- }
32
- try:
33
- # Preprocess text
34
- clean = clean_text(ticket_text)
35
-
36
- # Transform text with loaded TF-IDF vectorizer
37
- X_tfidf = tfidf.transform([clean])
38
-
39
- # Additional numeric features
40
- ticket_length = len(clean.split())
41
- sentiment = TextBlob(clean).sentiment.polarity
42
-
43
- # Combine sparse and dense features
44
- X_features = scipy.sparse.hstack([
45
- X_tfidf,
46
- np.array([[ticket_length]]),
47
- np.array([[sentiment]])
48
- ])
49
-
50
- # Predict using models
51
- issue_pred = model_issue.predict(X_features)[0]
52
- urgency_pred = model_urgency.predict(X_features)[0]
53
-
54
- # Extract entities from original text
55
- entities = extract_entities(ticket_text)
56
-
57
- return {
58
- "issue_type": issue_pred,
59
- "urgency_level": urgency_pred,
60
- "entities": entities
61
- }
62
-
63
- except Exception as e:
64
- # Catch any runtime errors and report them for debugging
65
- return {
66
- "issue_type": f"Prediction error: {str(e)}",
67
- "urgency_level": f"Prediction error: {str(e)}",
68
- "entities": {}
69
- }
 
3
  import joblib
4
  import scipy.sparse
5
  from textblob import TextBlob
6
+ import nltk
7
+
8
+ # Download NLTK punkt tokenizer to avoid runtime errors
9
+ nltk.download('punkt')
10
 
11
  from src.preprocessing import clean_text
12
+ from src.features import create_features
13
  from src.model import load_model
14
  from src.entity_extraction import extract_entities
15
 
16
+ # Define the path to the models directory
17
  BASE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "models"))
18
 
19
+ # Load models and vectorizer
20
+ model_issue = load_model(os.path.join(BASE_PATH, "model_issue_type.pkl"))
21
+ model_urgency = load_model(os.path.join(BASE_PATH, "model_urgency_level.pkl"))
22
+ tfidf = joblib.load(os.path.join(BASE_PATH, "tfidf.pkl"))
 
 
 
 
 
 
23
 
24
  def predict_ticket(ticket_text):
25
+ # Preprocess the input ticket text
26
+ clean = clean_text(ticket_text)
27
+
28
+ # TF-IDF transformation
29
+ X_tfidf = tfidf.transform([clean])
30
+
31
+ # Additional features
32
+ ticket_length = len(clean.split())
33
+ sentiment = TextBlob(clean).sentiment.polarity
34
+
35
+ # Combine sparse TF-IDF with dense features
36
+ X_features = scipy.sparse.hstack([
37
+ X_tfidf,
38
+ np.array([[ticket_length]]),
39
+ np.array([[sentiment]])
40
+ ])
41
+
42
+ # Make predictions
43
+ issue_pred = model_issue.predict(X_features)[0]
44
+ urgency_pred = model_urgency.predict(X_features)[0]
45
+ entities = extract_entities(ticket_text)
46
+
47
+ return {
48
+ "issue_type": issue_pred,
49
+ "urgency_level": urgency_pred,
50
+ "entities": entities
51
+ }