File size: 1,622 Bytes
e70f183
 
 
 
 
 
5e8ee1a
e70f183
 
 
 
5e8ee1a
e70f183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5e8ee1a
e70f183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
903a1b0
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
import os
import shutil
import gradio as gr
from fastapi import FastAPI, UploadFile, File, Form

from resume_parser import parse_resume
from model_logic import ResumeScorer
from logger import log_decision


app = FastAPI()
scorer = ResumeScorer()

UPLOAD_DIR = "uploads"
os.makedirs(UPLOAD_DIR, exist_ok=True)


def process_resume(file, title, level):

    import uuid

    temp_name = f"{uuid.uuid4()}.pdf"
    path = os.path.join(UPLOAD_DIR, temp_name)

    # CASE 1: FastAPI UploadFile
    if hasattr(file, "read"):
        with open(path, "wb") as f:
            shutil.copyfileobj(file, f)

    # CASE 2: Gradio file path
    else:
        shutil.copy(file.name if hasattr(file, "name") else file, path)

    text = parse_resume(path)

    result = scorer.score_resume_by_title(text, title, level)

    log_decision(title, result["decision"])

    os.remove(path)

    return result


@app.post("/analyze_resume")
async def analyze_resume(
    file: UploadFile = File(...),
    title: str = Form(...),
    level: str = Form(...)
):

    result = process_resume(file.file, title, level)

    return result


def gradio_interface(file, title, level):

    result = process_resume(file, title, level)

    return result


demo = gr.Interface(
    fn=gradio_interface,
    inputs=[
        gr.File(label="Upload Resume PDF/docx", file_types=[".pdf",".docx"]),
        gr.Textbox(label="Job Title"),
        gr.Dropdown(
            ["entry","junior","mid","senior"],
            label="Job Level"
        )
    ],
    outputs="json",
    title="AI Resume Screening System"
)


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