saherPervaiz commited on
Commit
a01b561
Β·
verified Β·
1 Parent(s): e693c99

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -8
app.py CHANGED
@@ -18,6 +18,15 @@ def upload_cvs(files):
18
  if len(files) > 10:
19
  return "❌ Limit exceeded: Upload a maximum of 10 CVs."
20
 
 
 
 
 
 
 
 
 
 
21
  cv_texts = [extract_text_from_file(f) for f in files]
22
  cv_names = [f.name for f in files]
23
  cv_vectors = get_embeddings(cv_texts)
@@ -26,7 +35,7 @@ def upload_cvs(files):
26
  return "❌ No valid CVs."
27
 
28
  faiss_index = create_faiss_index(cv_vectors)
29
- return f"βœ… Uploaded and indexed {len(files)} CVs."
30
 
31
  except Exception as e:
32
  return f"❌ Error during upload: {e}"
@@ -40,17 +49,27 @@ def match_jd(jd_text, match_mode):
40
  try:
41
  jd_vector = get_embeddings([jd_text])[0]
42
 
 
43
  if match_mode == "Top 3 Matches":
44
  indices = search_similar_cvs(jd_vector, faiss_index, k=3)
45
- else: # All CVs
46
  indices = list(range(len(cv_names)))
47
 
48
- matched = [cv_names[i] for i in indices]
49
- texts = [cv_texts[i] for i in indices]
 
 
 
 
 
 
 
 
50
 
51
  summary = summarize_match(jd_text, matched, texts)
52
 
53
- return f"βœ… {match_mode}:\n\n" + "\n".join(matched) + f"\n\nπŸ“ Summary:\n{summary}"
 
54
 
55
  except Exception as e:
56
  return f"❌ Error during matching: {e}"
@@ -61,20 +80,20 @@ def clear_data():
61
  return "🧹 Cleared."
62
 
63
  with gr.Blocks() as app:
64
- gr.Markdown("## πŸ“„ CV Matcher with Groq API (Flexible Matching Mode)")
65
 
66
  # Upload
67
  file_input = gr.File(file_types=[".pdf", ".docx"], file_count="multiple", label="πŸ“€ Upload CVs (Max 10)")
68
  upload_button = gr.Button("πŸ“ Upload & Index")
69
  upload_status = gr.Textbox(label="Upload Status")
70
 
71
- # Job Description & Matching
72
  jd_input = gr.Textbox(label="πŸ“‹ Paste Job Description", lines=8, placeholder="Paste job description here...")
73
 
74
  match_mode = gr.Radio(["Top 3 Matches", "All Uploaded CVs"], value="Top 3 Matches", label="Matching Mode")
75
 
76
  match_button = gr.Button("πŸ” Match CVs")
77
- result_output = gr.Textbox(label="Match Results", lines=20)
78
 
79
  # Clear Session
80
  clear_button = gr.Button("🧹 Clear All")
 
18
  if len(files) > 10:
19
  return "❌ Limit exceeded: Upload a maximum of 10 CVs."
20
 
21
+ # Remove duplicates based on filename
22
+ unique_files = []
23
+ seen = set()
24
+ for f in files:
25
+ if f.name not in seen:
26
+ seen.add(f.name)
27
+ unique_files.append(f)
28
+ files = unique_files
29
+
30
  cv_texts = [extract_text_from_file(f) for f in files]
31
  cv_names = [f.name for f in files]
32
  cv_vectors = get_embeddings(cv_texts)
 
35
  return "❌ No valid CVs."
36
 
37
  faiss_index = create_faiss_index(cv_vectors)
38
+ return f"βœ… Uploaded and indexed {len(files)} CV(s)."
39
 
40
  except Exception as e:
41
  return f"❌ Error during upload: {e}"
 
49
  try:
50
  jd_vector = get_embeddings([jd_text])[0]
51
 
52
+ # Select CVs based on match mode
53
  if match_mode == "Top 3 Matches":
54
  indices = search_similar_cvs(jd_vector, faiss_index, k=3)
55
+ else: # All uploaded CVs
56
  indices = list(range(len(cv_names)))
57
 
58
+ # Filter duplicates by name
59
+ seen = set()
60
+ unique_indices = []
61
+ for i in indices:
62
+ if cv_names[i] not in seen:
63
+ seen.add(cv_names[i])
64
+ unique_indices.append(i)
65
+
66
+ matched = [cv_names[i] for i in unique_indices]
67
+ texts = [cv_texts[i] for i in unique_indices]
68
 
69
  summary = summarize_match(jd_text, matched, texts)
70
 
71
+ title = "βœ… Match Result:" if len(matched) == 1 else f"βœ… Matching {len(matched)} CVs:"
72
+ return f"{title}\n\n" + "\n".join(matched) + f"\n\nπŸ“ Summary:\n{summary}"
73
 
74
  except Exception as e:
75
  return f"❌ Error during matching: {e}"
 
80
  return "🧹 Cleared."
81
 
82
  with gr.Blocks() as app:
83
+ gr.Markdown("## πŸ“„ CV Matcher with Groq API (Dynamic Matching)")
84
 
85
  # Upload
86
  file_input = gr.File(file_types=[".pdf", ".docx"], file_count="multiple", label="πŸ“€ Upload CVs (Max 10)")
87
  upload_button = gr.Button("πŸ“ Upload & Index")
88
  upload_status = gr.Textbox(label="Upload Status")
89
 
90
+ # Job Description Matching
91
  jd_input = gr.Textbox(label="πŸ“‹ Paste Job Description", lines=8, placeholder="Paste job description here...")
92
 
93
  match_mode = gr.Radio(["Top 3 Matches", "All Uploaded CVs"], value="Top 3 Matches", label="Matching Mode")
94
 
95
  match_button = gr.Button("πŸ” Match CVs")
96
+ result_output = gr.Textbox(label="Match Results", lines=25)
97
 
98
  # Clear Session
99
  clear_button = gr.Button("🧹 Clear All")