Muhammad541 commited on
Commit
2332fbf
·
verified ·
1 Parent(s): f3434ed

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -23
app.py CHANGED
@@ -59,7 +59,6 @@ def load_dataset(file_path, required_columns=[]):
59
  logger.error(f"Dataset not found at {file_path}. Exiting.")
60
  return None
61
 
62
- user_df = load_dataset("Updated_User_Profile_Dataset.csv", ["name", "skills", "level"])
63
  questions_df = load_dataset("Generated_Skill-Based_Questions.csv", ["Skill", "Question", "Answer"])
64
  courses_df = load_dataset("coursera_course_dataset_v2_no_null.csv", ["skills", "course_title", "Organization", "level"])
65
  jobs_df = load_dataset("Updated_Job_Posting_Dataset.csv", ["job_title", "company_name", "location", "required_skills", "job_description"])
@@ -184,8 +183,8 @@ def recommend_courses(skills_to_improve, user_level, upgrade=False):
184
 
185
  collab_scores = []
186
  for skill in skills_to_improve:
187
- overlap = sum(1 for user_skills_str in user_df['skills'] if pd.notna(user_skills_str) and skill.lower() in user_skills_str.lower())
188
- collab_scores.append(overlap / len(user_df))
189
  collab_similarities = np.array([collab_scores]).repeat(len(courses_df), axis=0).T
190
 
191
  popularity = courses_df['popularity'].fillna(0.5).to_numpy()
@@ -231,28 +230,34 @@ def assess_skills():
231
  data = request.get_json()
232
  logger.info(f"Received request: {data}")
233
 
234
- if not data or 'user_index' not in data or 'answers' not in data:
235
- logger.error("Invalid input: Missing 'user_index' or 'answers' in JSON body.")
236
- return jsonify({"error": "Invalid input. Provide 'user_index' and 'answers' in JSON body."}), 400
 
237
 
238
- # Validate answers length immediately
 
239
  answers = data['answers']
 
 
 
 
 
 
 
 
 
 
240
  if not isinstance(answers, list):
241
  logger.error(f"Answers must be a list, got: {type(answers)}")
242
  return jsonify({"error": "Answers must be a list."}), 400
243
- if len(answers) != 4:
244
- logger.error(f"Expected exactly 4 answers, but received {len(answers)}.")
245
- return jsonify({"error": f"Please provide exactly 4 answers. Received {len(answers)}."}), 400
246
-
247
- user_index = int(data['user_index'])
248
- if user_index < 0 or user_index >= len(user_df):
249
- logger.error(f"Invalid user index: {user_index}. Must be between 0 and {len(user_df) - 1}.")
250
- return jsonify({"error": "Invalid user index."}), 400
251
-
252
- user_text = user_df.loc[user_index, 'skills']
253
- user_skills = [skill.strip() for skill in user_text.split(",") if skill.strip()] if isinstance(user_text, str) else ["Python", "SQL"]
254
- user_name = user_df.loc[user_index, 'name']
255
- user_level = user_df.loc[user_index, 'level'] if 'level' in user_df.columns and pd.notna(user_df.loc[user_index, 'level']) else 'Intermediate'
256
  logger.info(f"User: {user_name}, Skills: {user_skills}, Level: {user_level}")
257
 
258
  initialize_resources(user_skills)
@@ -282,9 +287,9 @@ def assess_skills():
282
  logger.info(f"Selected questions: {user_questions[['Skill', 'Question']].to_dict(orient='records')}")
283
  logger.info(f"Number of selected questions: {len(user_questions)}")
284
 
285
- if len(user_questions) != 4:
286
- logger.error(f"Not enough questions for all skills. Expected 4, got {len(user_questions)}.")
287
- return jsonify({"error": f"Not enough questions for all skills! Expected 4, got {len(user_questions)}."}), 500
288
 
289
  user_responses = []
290
  for idx, row in user_questions.iterrows():
 
59
  logger.error(f"Dataset not found at {file_path}. Exiting.")
60
  return None
61
 
 
62
  questions_df = load_dataset("Generated_Skill-Based_Questions.csv", ["Skill", "Question", "Answer"])
63
  courses_df = load_dataset("coursera_course_dataset_v2_no_null.csv", ["skills", "course_title", "Organization", "level"])
64
  jobs_df = load_dataset("Updated_Job_Posting_Dataset.csv", ["job_title", "company_name", "location", "required_skills", "job_description"])
 
183
 
184
  collab_scores = []
185
  for skill in skills_to_improve:
186
+ overlap = 1 # Simplified since user_df is removed
187
+ collab_scores.append(overlap)
188
  collab_similarities = np.array([collab_scores]).repeat(len(courses_df), axis=0).T
189
 
190
  popularity = courses_df['popularity'].fillna(0.5).to_numpy()
 
230
  data = request.get_json()
231
  logger.info(f"Received request: {data}")
232
 
233
+ # Validate required fields
234
+ if not data or 'user_name' not in data or 'skills' not in data or 'answers' not in data:
235
+ logger.error("Invalid input: Missing 'user_name', 'skills', or 'answers' in JSON body.")
236
+ return jsonify({"error": "Invalid input. Provide 'user_name', 'skills', and 'answers' in JSON body."}), 400
237
 
238
+ user_name = data['user_name']
239
+ user_skills = data['skills']
240
  answers = data['answers']
241
+
242
+ # Validate inputs
243
+ if not isinstance(user_name, str) or not user_name.strip():
244
+ logger.error("Invalid user_name: Must be a non-empty string.")
245
+ return jsonify({"error": "Invalid user_name. Must be a non-empty string."}), 400
246
+
247
+ if not isinstance(user_skills, list) or not user_skills or not all(isinstance(skill, str) and skill.strip() for skill in user_skills):
248
+ logger.error("Invalid skills: Must be a non-empty list of non-empty strings.")
249
+ return jsonify({"error": "Invalid skills. Must be a non-empty list of non-empty strings."}), 400
250
+
251
  if not isinstance(answers, list):
252
  logger.error(f"Answers must be a list, got: {type(answers)}")
253
  return jsonify({"error": "Answers must be a list."}), 400
254
+
255
+ # Ensure the number of answers matches the number of skills
256
+ if len(answers) != len(user_skills):
257
+ logger.error(f"Number of answers ({len(answers)}) does not match number of skills ({len(user_skills)}).")
258
+ return jsonify({"error": f"Number of answers ({len(answers)}) must match the number of skills ({len(user_skills)})."}), 400
259
+
260
+ user_level = 'Intermediate' # Default level since user_df is removed
 
 
 
 
 
 
261
  logger.info(f"User: {user_name}, Skills: {user_skills}, Level: {user_level}")
262
 
263
  initialize_resources(user_skills)
 
287
  logger.info(f"Selected questions: {user_questions[['Skill', 'Question']].to_dict(orient='records')}")
288
  logger.info(f"Number of selected questions: {len(user_questions)}")
289
 
290
+ if len(user_questions) != len(user_skills):
291
+ logger.error(f"Number of selected questions ({len(user_questions)}) does not match number of skills ({len(user_skills)}).")
292
+ return jsonify({"error": f"Internal error: Number of selected questions ({len(user_questions)}) does not match number of skills ({len(user_skills)})."}), 500
293
 
294
  user_responses = []
295
  for idx, row in user_questions.iterrows():