Muhammad541 commited on
Commit
89f240b
·
verified ·
1 Parent(s): ed32658

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -12
app.py CHANGED
@@ -21,10 +21,15 @@ course_df = pd.read_csv(os.path.join(DATA_DIR, "coursera_course_dataset_v2_no_nu
21
  coding_df = pd.read_csv(os.path.join(DATA_DIR, "Software Questions.csv"), encoding="latin1")
22
 
23
  # Preprocess datasets
24
- coding_df.rename(columns={'Question': 'question', 'Answer': 'solutions'}, inplace=True)
 
 
 
 
 
 
25
  job_df.rename(columns={'company_name': 'company', 'required_skills': 'skills'}, inplace=True)
26
  course_df.rename(columns={'Title': 'course_title', 'Skills': 'skills'}, inplace=True)
27
- coding_df.dropna(subset=['question', 'solutions'], inplace=True)
28
  job_df["job_description"] = job_df["job_description"].fillna("")
29
 
30
  # Load BERT model and vectorizer
@@ -34,7 +39,7 @@ vectorizer = TfidfVectorizer()
34
  # Pydantic model for request body
35
  class UserInput(BaseModel):
36
  name: str
37
- skills: List[str] # Required list of skills
38
  answers: Optional[Dict[str, Dict[str, str]]] = None # Optional answers
39
 
40
  # Evaluate coding answers
@@ -48,14 +53,16 @@ def evaluate_coding_with_time(user_code, correct_code, start_time):
48
  return round(max(similarity, 0), 2)
49
 
50
  # Get coding challenges
51
- def get_coding_challenges(skills, num_questions=5):
52
  skill_challenges = {}
53
- for skill in skills:
54
- relevant = coding_df[coding_df["question"].str.contains(skill, case=False, na=False)]
 
 
55
  if not relevant.empty:
56
- skill_challenges[skill] = relevant.sample(min(num_questions, len(relevant)))[["question", "solutions"]].to_dict(orient="records")
57
  else:
58
- skill_challenges[skill] = []
59
  return skill_challenges
60
 
61
  # Assign proficiency level
@@ -90,13 +97,19 @@ def read_root():
90
 
91
  # New endpoint to provide challenges
92
  @app.get("/challenges")
93
- def get_user_challenges(skills: List[str]):
94
  if not skills:
95
  raise HTTPException(status_code=400, detail="Skills list cannot be empty")
96
- challenges = get_coding_challenges(skills)
97
- # Return only questions (exclude solutions for the user)
98
  return {
99
- "challenges": {skill: [challenge["question"] for challenge in challenge_list] for skill, challenge_list in challenges.items()}
 
 
 
 
 
 
100
  }
101
 
102
  @app.post("/assess")
 
21
  coding_df = pd.read_csv(os.path.join(DATA_DIR, "Software Questions.csv"), encoding="latin1")
22
 
23
  # Preprocess datasets
24
+ coding_df = coding_df.rename(columns={
25
+ 'Question': 'question',
26
+ 'Answer': 'solutions',
27
+ 'Category': 'category',
28
+ 'Difficulty': 'difficulty'
29
+ })
30
+ coding_df.dropna(subset=['question', 'solutions', 'category', 'difficulty'], inplace=True)
31
  job_df.rename(columns={'company_name': 'company', 'required_skills': 'skills'}, inplace=True)
32
  course_df.rename(columns={'Title': 'course_title', 'Skills': 'skills'}, inplace=True)
 
33
  job_df["job_description"] = job_df["job_description"].fillna("")
34
 
35
  # Load BERT model and vectorizer
 
39
  # Pydantic model for request body
40
  class UserInput(BaseModel):
41
  name: str
42
+ skills: List[str] # Required list of categories (e.g., "General Programming", "Data Structures")
43
  answers: Optional[Dict[str, Dict[str, str]]] = None # Optional answers
44
 
45
  # Evaluate coding answers
 
53
  return round(max(similarity, 0), 2)
54
 
55
  # Get coding challenges
56
+ def get_coding_challenges(categories: List[str], num_questions=5, difficulty: Optional[str] = None):
57
  skill_challenges = {}
58
+ for category in categories:
59
+ relevant = coding_df[coding_df["category"].str.contains(category, case=False, na=False)]
60
+ if difficulty:
61
+ relevant = relevant[relevant["difficulty"].str.lower() == difficulty.lower()]
62
  if not relevant.empty:
63
+ skill_challenges[category] = relevant.sample(min(num_questions, len(relevant)))[["question", "solutions", "difficulty"]].to_dict(orient="records")
64
  else:
65
+ skill_challenges[category] = []
66
  return skill_challenges
67
 
68
  # Assign proficiency level
 
97
 
98
  # New endpoint to provide challenges
99
  @app.get("/challenges")
100
+ def get_user_challenges(skills: List[str], difficulty: Optional[str] = None):
101
  if not skills:
102
  raise HTTPException(status_code=400, detail="Skills list cannot be empty")
103
+ challenges = get_coding_challenges(skills, difficulty=difficulty)
104
+ # Return only questions and difficulty (exclude solutions for the user)
105
  return {
106
+ "challenges": {
107
+ category: [
108
+ {"question": challenge["question"], "difficulty": challenge["difficulty"]}
109
+ for challenge in challenge_list
110
+ ]
111
+ for category, challenge_list in challenges.items()
112
+ }
113
  }
114
 
115
  @app.post("/assess")