Spaces:
Sleeping
Sleeping
Update recommender.py
Browse files- recommender.py +10 -9
recommender.py
CHANGED
|
@@ -2,11 +2,11 @@ from skill_extraction import get_skill_embedding
|
|
| 2 |
import numpy as np
|
| 3 |
|
| 4 |
def generate_recommendations(db, user_id):
|
| 5 |
-
# Step 1: Get
|
| 6 |
-
rec_skills = db.get_recommendations(user_id) #
|
| 7 |
|
| 8 |
-
# Step 2: Get
|
| 9 |
-
user_skill_data = db.get_user_skills(user_id)
|
| 10 |
user_skill_embeddings = [
|
| 11 |
get_skill_embedding(skill)
|
| 12 |
for skill, _ in user_skill_data
|
|
@@ -18,19 +18,20 @@ def generate_recommendations(db, user_id):
|
|
| 18 |
for rec_skill in rec_skills:
|
| 19 |
rec_emb = get_skill_embedding(rec_skill)
|
| 20 |
if rec_emb is None:
|
| 21 |
-
results.append((rec_skill, "")) # fallback
|
|
|
|
| 22 |
continue
|
| 23 |
|
| 24 |
-
#
|
| 25 |
sims = [np.dot(rec_emb, emb) for emb in user_skill_embeddings] if user_skill_embeddings else []
|
| 26 |
max_sim = float(max(sims)) if sims else 0.40
|
| 27 |
|
| 28 |
-
#
|
| 29 |
-
conf_score = min(round(max_sim * 1.2, 2), 0.98)
|
| 30 |
|
| 31 |
results.append((rec_skill, conf_score))
|
| 32 |
|
| 33 |
-
# Log
|
| 34 |
db.log_interaction(user_id, "VIEWED_RECOMMENDATION", skill=rec_skill)
|
| 35 |
|
| 36 |
return sorted(results, key=lambda x: x[1], reverse=True)
|
|
|
|
| 2 |
import numpy as np
|
| 3 |
|
| 4 |
def generate_recommendations(db, user_id):
|
| 5 |
+
# Step 1: Get recommended skills
|
| 6 |
+
rec_skills = db.get_recommendations(user_id) # list of skill names
|
| 7 |
|
| 8 |
+
# Step 2: Get existing user skills
|
| 9 |
+
user_skill_data = db.get_user_skills(user_id) # returns [(skill, conf), ...]
|
| 10 |
user_skill_embeddings = [
|
| 11 |
get_skill_embedding(skill)
|
| 12 |
for skill, _ in user_skill_data
|
|
|
|
| 18 |
for rec_skill in rec_skills:
|
| 19 |
rec_emb = get_skill_embedding(rec_skill)
|
| 20 |
if rec_emb is None:
|
| 21 |
+
results.append((rec_skill, "")) # fallback
|
| 22 |
+
db.log_interaction(user_id, "VIEWED_RECOMMENDATION", skill=rec_skill)
|
| 23 |
continue
|
| 24 |
|
| 25 |
+
# Compute similarity to user's best skill
|
| 26 |
sims = [np.dot(rec_emb, emb) for emb in user_skill_embeddings] if user_skill_embeddings else []
|
| 27 |
max_sim = float(max(sims)) if sims else 0.40
|
| 28 |
|
| 29 |
+
# Scale & normalize confidence
|
| 30 |
+
conf_score = min(round(max_sim * 1.2, 2), 0.98)
|
| 31 |
|
| 32 |
results.append((rec_skill, conf_score))
|
| 33 |
|
| 34 |
+
# Log
|
| 35 |
db.log_interaction(user_id, "VIEWED_RECOMMENDATION", skill=rec_skill)
|
| 36 |
|
| 37 |
return sorted(results, key=lambda x: x[1], reverse=True)
|