File size: 1,300 Bytes
d904f6c
 
 
 
e608159
 
d904f6c
e608159
 
d904f6c
 
 
 
 
 
 
 
 
 
 
e608159
 
d904f6c
 
e608159
d904f6c
 
 
e608159
 
d904f6c
 
 
e608159
d904f6c
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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)