Update app.py
Browse files
app.py
CHANGED
|
@@ -54,15 +54,15 @@ for col in required_columns:
|
|
| 54 |
if col not in df.columns:
|
| 55 |
raise Exception(f"β Column '{col}' is missing from the dataset!")
|
| 56 |
|
| 57 |
-
# β
Convert "Case Problem" column to lowercase for consistency
|
| 58 |
-
df["Case Problem"] = df["Case Problem"].astype(str).str.lower()
|
| 59 |
|
| 60 |
-
# β
|
| 61 |
encoder = LabelEncoder()
|
| 62 |
df["Case Problem Encoded"] = encoder.fit_transform(df["Case Problem"])
|
| 63 |
df["Feedback Encoded"] = encoder.fit_transform(df["Feedback"])
|
| 64 |
|
| 65 |
-
# β
Save encoder
|
| 66 |
joblib.dump(encoder, "case_problem_encoder.pkl")
|
| 67 |
|
| 68 |
# β
Train Model
|
|
@@ -72,7 +72,7 @@ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_
|
|
| 72 |
model = RandomForestClassifier(n_estimators=100, random_state=42)
|
| 73 |
model.fit(X_train, y_train)
|
| 74 |
|
| 75 |
-
# β
Save model
|
| 76 |
joblib.dump(model, "feedback_model.pkl")
|
| 77 |
print("β
Model trained successfully!")
|
| 78 |
|
|
@@ -89,8 +89,8 @@ async def predict_feedback(data: PredictionInput):
|
|
| 89 |
# β
Load encoder
|
| 90 |
encoder = joblib.load("case_problem_encoder.pkl")
|
| 91 |
|
| 92 |
-
# β
Convert input to lowercase
|
| 93 |
-
case_problem_lower = data.case_problem.lower()
|
| 94 |
|
| 95 |
# β
Check if input exists in training data
|
| 96 |
if case_problem_lower not in df["Case Problem"].values:
|
|
@@ -108,13 +108,13 @@ async def predict_feedback(data: PredictionInput):
|
|
| 108 |
except Exception as e:
|
| 109 |
return {"error": str(e)}
|
| 110 |
|
| 111 |
-
# β
Gradio UI with
|
| 112 |
def gradio_interface(case_problem):
|
| 113 |
if model is None:
|
| 114 |
return "Model not trained yet."
|
| 115 |
|
| 116 |
encoder = joblib.load("case_problem_encoder.pkl")
|
| 117 |
-
case_problem_lower = case_problem.lower()
|
| 118 |
|
| 119 |
if case_problem_lower not in df["Case Problem"].values:
|
| 120 |
valid_problems = ", ".join(df["Case Problem"].unique())
|
|
|
|
| 54 |
if col not in df.columns:
|
| 55 |
raise Exception(f"β Column '{col}' is missing from the dataset!")
|
| 56 |
|
| 57 |
+
# β
Convert "Case Problem" column to lowercase and remove spaces for consistency
|
| 58 |
+
df["Case Problem"] = df["Case Problem"].astype(str).str.strip().str.lower()
|
| 59 |
|
| 60 |
+
# β
Train and save LabelEncoder to handle unseen labels correctly
|
| 61 |
encoder = LabelEncoder()
|
| 62 |
df["Case Problem Encoded"] = encoder.fit_transform(df["Case Problem"])
|
| 63 |
df["Feedback Encoded"] = encoder.fit_transform(df["Feedback"])
|
| 64 |
|
| 65 |
+
# β
Save encoder to use it later
|
| 66 |
joblib.dump(encoder, "case_problem_encoder.pkl")
|
| 67 |
|
| 68 |
# β
Train Model
|
|
|
|
| 72 |
model = RandomForestClassifier(n_estimators=100, random_state=42)
|
| 73 |
model.fit(X_train, y_train)
|
| 74 |
|
| 75 |
+
# β
Save trained model
|
| 76 |
joblib.dump(model, "feedback_model.pkl")
|
| 77 |
print("β
Model trained successfully!")
|
| 78 |
|
|
|
|
| 89 |
# β
Load encoder
|
| 90 |
encoder = joblib.load("case_problem_encoder.pkl")
|
| 91 |
|
| 92 |
+
# β
Convert input to lowercase and remove spaces
|
| 93 |
+
case_problem_lower = data.case_problem.strip().lower()
|
| 94 |
|
| 95 |
# β
Check if input exists in training data
|
| 96 |
if case_problem_lower not in df["Case Problem"].values:
|
|
|
|
| 108 |
except Exception as e:
|
| 109 |
return {"error": str(e)}
|
| 110 |
|
| 111 |
+
# β
Gradio UI with better handling
|
| 112 |
def gradio_interface(case_problem):
|
| 113 |
if model is None:
|
| 114 |
return "Model not trained yet."
|
| 115 |
|
| 116 |
encoder = joblib.load("case_problem_encoder.pkl")
|
| 117 |
+
case_problem_lower = case_problem.strip().lower()
|
| 118 |
|
| 119 |
if case_problem_lower not in df["Case Problem"].values:
|
| 120 |
valid_problems = ", ".join(df["Case Problem"].unique())
|