File size: 1,998 Bytes
dd9ad3f
 
 
5a9810c
dd9ad3f
5a9810c
dd9ad3f
 
 
 
 
 
5a9810c
 
dd9ad3f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5a9810c
dd9ad3f
 
 
 
 
 
 
 
 
5a9810c
dd9ad3f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from transformers import pipeline
from sentence_transformers import SentenceTransformer
import spaces  # Import Hugging Face ZeroGPU module

# Load models
print("Loading BERT NER model...")
ner_pipeline = pipeline("ner", model="yashpwr/resume-ner-bert-v2", aggregation_strategy="simple")

print("Loading SBERT model...")
similarity_model = SentenceTransformer("all-MiniLM-L6-v2")

# Decorate GPU functions
@spaces.GPU
def parse_resume(text):
    if not text:
        return {"error": "Empty input"}
    try:
        results = ner_pipeline(text)
        formatted = []
        for entity in results:
            formatted.append({
                "entity_group": entity["entity_group"],
                "word": str(entity["word"]),
                "score": float(entity["score"])
            })
        return {"entities": formatted}
    except Exception as e:
        return {"error": str(e)}

@spaces.GPU
def get_embeddings(text):
    if not text:
        return {"error": "Empty input"}
    try:
        vector = similarity_model.encode(text).tolist()
        return {"embedding": vector}
    except Exception as e:
        return {"error": str(e)}

# Create Gradio UI
with gr.Blocks() as demo:
    gr.Markdown("# AI Resume Matcher Serverless API")
    
    with gr.Tab("NER Parser"):
        text_input = gr.Textbox(label="Resume Text", placeholder="Paste resume text here...", lines=10)
        parse_btn = gr.Button("Extract Entities")
        json_output = gr.JSON(label="Parsed JSON Output")
        parse_btn.click(fn=parse_resume, inputs=text_input, outputs=json_output, api_name="parse")
        
    with gr.Tab("Embeddings"):
        text_input_emb = gr.Textbox(label="Input Text", placeholder="Enter sentence or paragraph...", lines=5)
        embed_btn = gr.Button("Generate Vector")
        vector_output = gr.JSON(label="Embedding Vector")
        embed_btn.click(fn=get_embeddings, inputs=text_input_emb, outputs=vector_output, api_name="embed")

demo.launch()