Spaces:
Sleeping
Sleeping
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()
|