File size: 2,296 Bytes
8b6aa48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# app.py
import os
import json
import pandas as pd
import google.generativeai as genai
import gradio as gr

# Configure Gemini
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
model = genai.GenerativeModel("gemini-pro")

# Load and clean CSV
df_raw = pd.read_csv("data/assessments.csv")

def preprocess_data(df):
    def clean_duration(text):
        try:
            return int(text.split('=')[-1].strip())
        except:
            return None

    def clean_support(val):
        return "Yes" if val == 'T' else "No"

    def clean_test_type(val):
        return [x.strip() for x in str(val).split('\n') if x.strip()]

    df_cleaned = pd.DataFrame({
        "url": "https://www.shl.com" + df.iloc[:, 2].astype(str),
        "remote_support": df.iloc[:, 3].apply(clean_support),
        "adaptive_support": df.iloc[:, 4].apply(clean_support),
        "test_type": df.iloc[:, 5].apply(clean_test_type),
        "description": df.iloc[:, 6],
        "duration": df.iloc[:, 9].apply(clean_duration),
    })
    return df_cleaned

assessments = preprocess_data(df_raw)

def recommend_assessments(query, top_k=10):
    prompt = f"""
    Given this job description: "{query}", recommend the top {top_k} relevant SHL assessments from the following list.
    Return the result as JSON with this format:
    {{
        "recommended_assessments": [
            {{
                "url": ..., 
                "adaptive_support": ..., 
                "remote_support": ..., 
                "description": ..., 
                "duration": ..., 
                "test_type": [...]
            }},
            ...
        ]
    }}

    Data:
    {assessments.to_dict(orient='records')}
    """

    response = model.generate_content(prompt)
    try:
        result = json.loads(response.text)
        return result
    except Exception as e:
        return {"error": f"Failed to parse response: {str(e)}\n{response.text}"}

def predict(query):
    return recommend_assessments(query)

iface = gr.Interface(
    fn=predict,
    inputs=gr.Textbox(label="Enter Job Description", lines=4),
    outputs="json",
    title="SHL Assessment Recommender (Gemini-powered)",
    description="Paste a job description and get the most relevant SHL assessments."
)

if __name__ == "__main__":
    iface.launch()