Spaces:
Running
Running
Update app.py
Browse files
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 =
|
188 |
-
collab_scores.append(overlap
|
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 |
-
|
235 |
-
|
236 |
-
|
|
|
237 |
|
238 |
-
|
|
|
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 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
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) !=
|
286 |
-
logger.error(f"
|
287 |
-
return jsonify({"error": f"
|
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():
|