Spaces:
Sleeping
Sleeping
# app.py | |
import gradio as gr | |
from text_extractor import extract_text_from_file | |
from embedder import get_embeddings | |
from vector_store import create_faiss_index, search_similar_cvs | |
from groq_api import get_summary | |
# Global storage | |
cv_texts = [] | |
cv_names = [] | |
cv_vectors = [] | |
faiss_index = None | |
def upload_cvs(files): | |
global cv_texts, cv_names, cv_vectors, faiss_index | |
cv_texts = [extract_text_from_file(f.name) for f in files] | |
cv_names = [f.name for f in files] | |
cv_vectors = get_embeddings(cv_texts) | |
faiss_index = create_faiss_index(cv_vectors) | |
return f"Uploaded and indexed {len(files)} CVs." | |
def match_jd(jd_text): | |
if not faiss_index: | |
return "Please upload CVs first." | |
jd_vector = get_embeddings([jd_text])[0] | |
top_k_indices = search_similar_cvs(jd_vector, faiss_index, k=3) | |
matched_names = [cv_names[i] for i in top_k_indices] | |
matched_texts = [cv_texts[i] for i in top_k_indices] | |
summary = get_summary(jd_text, matched_texts) | |
return f"Top Matches: {matched_names}\n\nSummary: {summary}" | |
def clear_data(): | |
global cv_texts, cv_names, cv_vectors, faiss_index | |
cv_texts, cv_names, cv_vectors, faiss_index = [], [], [], None | |
return "Data cleared." | |
iface = gr.Interface( | |
fn=match_jd, | |
inputs=[ | |
gr.Textbox(lines=10, label="Paste Job Description"), | |
], | |
outputs="text", | |
title="CV Matcher with Groq", | |
description="Upload CVs, enter a Job Description, and get top matches and summary." | |
) | |
upload = gr.Interface( | |
fn=upload_cvs, | |
inputs=gr.File(file_types=[".pdf", ".docx"], file_count="multiple"), | |
outputs="text", | |
title="Upload CVs" | |
) | |
clear = gr.Interface(fn=clear_data, inputs=[], outputs="text", title="Reset Data") | |
app = gr.TabbedInterface([upload, iface, clear], ["Upload CVs", "Match JD", "Clear Data"]) | |
if __name__ == "__main__": | |
app.launch() | |