Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -62,7 +62,7 @@ Respond only 'Yes' if suitable, otherwise 'No'.
|
|
| 62 |
return "No"
|
| 63 |
|
| 64 |
# ----------------------------
|
| 65 |
-
# Filter by roles
|
| 66 |
# ----------------------------
|
| 67 |
def filter_by_roles(category_name):
|
| 68 |
job_titles = CATEGORIES[category_name]
|
|
@@ -95,16 +95,23 @@ def filter_by_roles(category_name):
|
|
| 95 |
return df, FILTERED_CSV
|
| 96 |
|
| 97 |
# ----------------------------
|
| 98 |
-
#
|
| 99 |
# ----------------------------
|
| 100 |
def llm_recommendations(category_name):
|
| 101 |
job_titles = CATEGORIES[category_name]
|
|
|
|
|
|
|
| 102 |
if not os.path.exists(FILTERED_CSV):
|
| 103 |
return pd.DataFrame(), None
|
| 104 |
|
| 105 |
-
|
| 106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
recommended = []
|
|
|
|
| 108 |
|
| 109 |
for i in range(0, len(filtered_candidates), BATCH_SIZE):
|
| 110 |
batch = filtered_candidates[i:i+BATCH_SIZE]
|
|
@@ -118,11 +125,18 @@ def llm_recommendations(category_name):
|
|
| 118 |
return pd.DataFrame(), None
|
| 119 |
|
| 120 |
df_rec = pd.DataFrame(recommended)
|
| 121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
df_rec = df_rec.sort_values("Salary_sort").drop(columns=["Salary_sort"])
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
|
|
|
| 126 |
|
| 127 |
# ----------------------------
|
| 128 |
# Show first 5 raw JSON candidates
|
|
|
|
| 62 |
return "No"
|
| 63 |
|
| 64 |
# ----------------------------
|
| 65 |
+
# Step 1: Filter by roles
|
| 66 |
# ----------------------------
|
| 67 |
def filter_by_roles(category_name):
|
| 68 |
job_titles = CATEGORIES[category_name]
|
|
|
|
| 95 |
return df, FILTERED_CSV
|
| 96 |
|
| 97 |
# ----------------------------
|
| 98 |
+
# Step 2: LLM recommendations
|
| 99 |
# ----------------------------
|
| 100 |
def llm_recommendations(category_name):
|
| 101 |
job_titles = CATEGORIES[category_name]
|
| 102 |
+
|
| 103 |
+
# Read filtered candidates from CSV
|
| 104 |
if not os.path.exists(FILTERED_CSV):
|
| 105 |
return pd.DataFrame(), None
|
| 106 |
|
| 107 |
+
df_filtered = pd.read_csv(FILTERED_CSV)
|
| 108 |
+
df_filtered = df_filtered[df_filtered["Category"] == category_name]
|
| 109 |
+
|
| 110 |
+
if df_filtered.empty:
|
| 111 |
+
return pd.DataFrame(), None
|
| 112 |
+
|
| 113 |
recommended = []
|
| 114 |
+
filtered_candidates = df_filtered.to_dict(orient="records")
|
| 115 |
|
| 116 |
for i in range(0, len(filtered_candidates), BATCH_SIZE):
|
| 117 |
batch = filtered_candidates[i:i+BATCH_SIZE]
|
|
|
|
| 125 |
return pd.DataFrame(), None
|
| 126 |
|
| 127 |
df_rec = pd.DataFrame(recommended)
|
| 128 |
+
# Sort by Salary (numeric)
|
| 129 |
+
def parse_salary(s):
|
| 130 |
+
try:
|
| 131 |
+
return float(s.replace("$","").replace(",",""))
|
| 132 |
+
except:
|
| 133 |
+
return float('inf')
|
| 134 |
+
df_rec["Salary_sort"] = df_rec["Salary"].apply(parse_salary)
|
| 135 |
df_rec = df_rec.sort_values("Salary_sort").drop(columns=["Salary_sort"])
|
| 136 |
+
df_top5 = df_rec.head(5)
|
| 137 |
+
df_top5.to_csv(OUTPUT_FILE, index=False)
|
| 138 |
+
|
| 139 |
+
return df_top5, OUTPUT_FILE
|
| 140 |
|
| 141 |
# ----------------------------
|
| 142 |
# Show first 5 raw JSON candidates
|