Spaces:
Running
Running
| from skill_extraction import get_skill_embedding | |
| import numpy as np | |
| def generate_recommendations(db, user_id): | |
| # Step 1: Get recommended skills | |
| rec_skills = db.get_recommendations(user_id) # list of skill names | |
| # Step 2: Get existing user skills | |
| user_skill_data = db.get_user_skills(user_id) # returns [(skill, conf), ...] | |
| user_skill_embeddings = [ | |
| get_skill_embedding(skill) | |
| for skill, _ in user_skill_data | |
| if get_skill_embedding(skill) is not None | |
| ] | |
| results = [] | |
| for rec_skill in rec_skills: | |
| rec_emb = get_skill_embedding(rec_skill) | |
| if rec_emb is None: | |
| results.append((rec_skill, "")) # fallback | |
| db.log_interaction(user_id, "VIEWED_RECOMMENDATION", skill=rec_skill) | |
| continue | |
| # Compute similarity to user's best skill | |
| sims = [np.dot(rec_emb, emb) for emb in user_skill_embeddings] if user_skill_embeddings else [] | |
| max_sim = float(max(sims)) if sims else 0.40 | |
| # Scale & normalize confidence | |
| conf_score = min(round(max_sim * 1.2, 2), 0.98) | |
| results.append((rec_skill, conf_score)) | |
| # Log | |
| db.log_interaction(user_id, "VIEWED_RECOMMENDATION", skill=rec_skill) | |
| return sorted(results, key=lambda x: x[1], reverse=True) | |