Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -8,14 +8,14 @@ from sklearn.metrics.pairwise import cosine_similarity
|
|
8 |
import time
|
9 |
import os
|
10 |
|
11 |
-
# Set cache directory
|
12 |
os.environ["HF_HOME"] = "/app/cache"
|
13 |
os.environ["TRANSFORMERS_CACHE"] = "/app/cache"
|
14 |
|
15 |
app = FastAPI()
|
16 |
|
17 |
-
# Load datasets
|
18 |
-
DATA_DIR = "/app/data/"
|
19 |
job_df = pd.read_csv(os.path.join(DATA_DIR, "Updated_Job_Posting_Dataset.csv"), encoding="latin1")
|
20 |
course_df = pd.read_csv(os.path.join(DATA_DIR, "coursera_course_dataset_v2_no_null.csv"))
|
21 |
coding_df = pd.read_csv(os.path.join(DATA_DIR, "Software Questions.csv"), encoding="latin1")
|
@@ -88,19 +88,27 @@ def recommend_jobs(skills):
|
|
88 |
def read_root():
|
89 |
return {"message": "Skill Assessment API"}
|
90 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
@app.post("/assess")
|
92 |
def assess_skills(user_input: UserInput):
|
93 |
-
# Extract user data from request
|
94 |
user_name = user_input.name
|
95 |
user_skills = user_input.skills
|
96 |
|
97 |
if not user_skills:
|
98 |
raise HTTPException(status_code=400, detail="Skills list cannot be empty")
|
99 |
|
100 |
-
# Fetch coding challenges based on provided skills
|
101 |
challenges = get_coding_challenges(user_skills)
|
102 |
|
103 |
-
# Evaluate skills
|
104 |
user_scores = {}
|
105 |
for skill, challenge_list in challenges.items():
|
106 |
if not challenge_list:
|
@@ -111,7 +119,6 @@ def assess_skills(user_input: UserInput):
|
|
111 |
num_questions = len(challenge_list)
|
112 |
|
113 |
if user_input.answers and skill in user_input.answers:
|
114 |
-
# Use provided answers
|
115 |
for challenge in challenge_list:
|
116 |
question = challenge["question"]
|
117 |
if question in user_input.answers[skill]:
|
@@ -121,18 +128,15 @@ def assess_skills(user_input: UserInput):
|
|
121 |
score = evaluate_coding_with_time(user_code, correct_code, start_time)
|
122 |
total_score += score
|
123 |
else:
|
124 |
-
total_score += 0
|
125 |
else:
|
126 |
-
# No answers provided; assign default score (50% per question)
|
127 |
total_score = 50 * num_questions
|
128 |
|
129 |
user_scores[skill] = round(total_score / num_questions, 2)
|
130 |
|
131 |
-
# Proficiency levels
|
132 |
proficiency_levels = {skill: get_proficiency_level(score) for skill, score in user_scores.items()}
|
133 |
weak_skills = [skill for skill, level in proficiency_levels.items() if level in ["Beginner", "Intermediate"]]
|
134 |
|
135 |
-
# Recommendations
|
136 |
courses = recommend_courses(weak_skills)
|
137 |
jobs = recommend_jobs(user_skills)
|
138 |
|
|
|
8 |
import time
|
9 |
import os
|
10 |
|
11 |
+
# Set cache directory
|
12 |
os.environ["HF_HOME"] = "/app/cache"
|
13 |
os.environ["TRANSFORMERS_CACHE"] = "/app/cache"
|
14 |
|
15 |
app = FastAPI()
|
16 |
|
17 |
+
# Load datasets
|
18 |
+
DATA_DIR = "/app/data/"
|
19 |
job_df = pd.read_csv(os.path.join(DATA_DIR, "Updated_Job_Posting_Dataset.csv"), encoding="latin1")
|
20 |
course_df = pd.read_csv(os.path.join(DATA_DIR, "coursera_course_dataset_v2_no_null.csv"))
|
21 |
coding_df = pd.read_csv(os.path.join(DATA_DIR, "Software Questions.csv"), encoding="latin1")
|
|
|
88 |
def read_root():
|
89 |
return {"message": "Skill Assessment API"}
|
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")
|
103 |
def assess_skills(user_input: UserInput):
|
|
|
104 |
user_name = user_input.name
|
105 |
user_skills = user_input.skills
|
106 |
|
107 |
if not user_skills:
|
108 |
raise HTTPException(status_code=400, detail="Skills list cannot be empty")
|
109 |
|
|
|
110 |
challenges = get_coding_challenges(user_skills)
|
111 |
|
|
|
112 |
user_scores = {}
|
113 |
for skill, challenge_list in challenges.items():
|
114 |
if not challenge_list:
|
|
|
119 |
num_questions = len(challenge_list)
|
120 |
|
121 |
if user_input.answers and skill in user_input.answers:
|
|
|
122 |
for challenge in challenge_list:
|
123 |
question = challenge["question"]
|
124 |
if question in user_input.answers[skill]:
|
|
|
128 |
score = evaluate_coding_with_time(user_code, correct_code, start_time)
|
129 |
total_score += score
|
130 |
else:
|
131 |
+
total_score += 0
|
132 |
else:
|
|
|
133 |
total_score = 50 * num_questions
|
134 |
|
135 |
user_scores[skill] = round(total_score / num_questions, 2)
|
136 |
|
|
|
137 |
proficiency_levels = {skill: get_proficiency_level(score) for skill, score in user_scores.items()}
|
138 |
weak_skills = [skill for skill, level in proficiency_levels.items() if level in ["Beginner", "Intermediate"]]
|
139 |
|
|
|
140 |
courses = recommend_courses(weak_skills)
|
141 |
jobs = recommend_jobs(user_skills)
|
142 |
|