File size: 3,019 Bytes
1284607
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# skill_assessment_tool/app.py
import ast
from textblob import TextBlob
from transformers import pipeline
import gradio as gr

# Coding Test Analyzer
def analyze_code(code_str):
    try:
        tree = ast.parse(code_str)
        complexity = sum(1 for node in ast.walk(tree) if isinstance(node, ast.For))
        return {"syntax": "valid", "complexity": complexity, "score": min(100, 90 - complexity * 5)}
    except SyntaxError:
        return {"syntax": "invalid", "complexity": 0, "score": 20}

# Video Interview Analyzer (simplified, assumes text input)
def analyze_video_response(text):
    blob = TextBlob(text)
    sentiment = blob.sentiment.polarity  # -1 to 1
    comm_score = max(50, int((sentiment + 1) * 50))  # Normalize to 0-100
    return {"communication": comm_score, "confidence": comm_score - 10}

# Behavioral Response Analyzer
def analyze_behavioral_response(text):
    classifier = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
    result = classifier(text)[0]
    adapt_score = 80 if result["label"] == "POSITIVE" else 60
    return {"adaptability": adapt_score}

# Report Generator
def generate_report(tech_score, comm_score, adapt_score):
    return {
        "Technical Skills": tech_score,
        "Communication": comm_score,
        "Adaptability": adapt_score,
        "Overall": round((tech_score + comm_score + adapt_score) / 3, 2)
    }

# Main function for Gradio
def assess_candidate(code, video_text, behavioral_text):
    code_result = analyze_code(code)
    video_result = analyze_video_response(video_text)
    behavioral_result = analyze_behavioral_response(behavioral_text)

    report = generate_report(
        code_result["score"],
        video_result["communication"],
        behavioral_result["adaptability"]
    )

    # Return as a formatted string (Gradio outputs text or UI elements)
    output = (
        f"Report:\n"
        f"Technical Skills: {report['Technical Skills']}/100\n"
        f"Communication: {report['Communication']}/100\n"
        f"Adaptability: {report['Adaptability']}/100\n"
        f"Overall: {report['Overall']}/100\n\n"
        f"Details:\n"
        f"Code Analysis: {code_result}\n"
        f"Video Analysis: {video_result}\n"
        f"Behavioral Analysis: {behavioral_result}"
    )
    return output

# Gradio Interface
interface = gr.Interface(
    fn=assess_candidate,
    inputs=[
        gr.Textbox(lines=5, label="Coding Test Submission", placeholder="Paste your Python code here..."),
        gr.Textbox(lines=3, label="Video Interview Response", placeholder="Type your response (e.g., transcribed video)..."),
        gr.Textbox(lines=3, label="Behavioral Response", placeholder="How do you handle team conflict?...")
    ],
    outputs=gr.Textbox(label="Assessment Report"),
    title="Skill Assessment Tool",
    description="Enter code, video response, and behavioral text to get a skill assessment report."
)

# Launch the app
interface.launch(server_name="0.0.0.0", server_port=7860)