redrob-ranker / features /availability.py
Ritesh Routray
Add full Phase B ranking pipeline with Gradio app
e11aeff
Raw
History Blame Contribute Delete
1.12 kB
from datetime import date, datetime
def _days_since(date_str: str | None) -> float:
if not date_str:
return 999.0
for fmt in ("%Y-%m-%d", "%Y-%m", "%Y"):
try:
d = datetime.strptime(date_str, fmt).date()
return float(max(0, (date.today() - d).days))
except ValueError:
continue
return 999.0
def score(candidate: dict) -> float:
signals = candidate.get("redrob_signals", {}) or {}
days_inactive = _days_since(signals.get("last_active_date"))
recency = max(0.0, 1.0 - days_inactive / 180.0)
response_rate = float(signals.get("recruiter_response_rate") or 0.0)
open_to_work = 1.0 if signals.get("open_to_work_flag") else 0.0
if open_to_work and days_inactive < 7:
response_rate = max(response_rate, 0.3)
return float(min(1.0, 0.4 * recency + 0.4 * response_rate + 0.2 * open_to_work))