redrob-ranker / test_cross_encoder.py
MrNK2107
chore: fix all ruff lint errors (174 -> 0), clean up unused imports/vars, fix line lengths
e9fe93a
Raw
History Blame Contribute Delete
3 kB
# ruff: noqa: E501
#!/usr/bin/env python3
"""Test cross-encoder directly on various profile/text pairs."""
import os
import sys
sys.path.insert(0, '/home/nanda/India-Runs')
os.environ["HF_HUB_OFFLINE"] = "1"
os.environ["TRANSFORMERS_OFFLINE"] = "1"
from src.core.config import DATA_DIR
from src.core.profile_store import ProfileStore
from src.search.reranker import CrossEncoderReranker
reranker = CrossEncoderReranker(timeout_ms=0)
profiles = ProfileStore()
profiles.load_sample(DATA_DIR / "samples" / "sample_candidates.json")
test_cases = [
("senior software engineer python java aws", "CAND_0000088", "Riya - Software Engineer @ TCS (Java, JavaScript, AWS, Azure)"),
("senior software engineer python java aws", "CAND_0000100", "Amit - Data Scientist @ Microsoft (Python, PostgreSQL, AWS, Kotlin)"),
("senior software engineer python java aws", "CAND_0000025", "Anika - Frontend Engineer @ TechM (JS, TS, GCP)"),
("senior software engineer python java aws", "CAND_0000044", "Vihaan - Frontend Engineer @ TechM (JS, Python, Hadoop)"),
("data scientist machine learning python pytorch", "CAND_0000001", "Ira - Backend Engineer @ Mindtree (NLP, Image Class, LLMs)"),
("data scientist machine learning python pytorch", "CAND_0000100", "Amit - Data Scientist @ Microsoft (Python, PostgreSQL)"),
("full stack developer react node.js python", "CAND_0000044", "Vihaan - Frontend @ TechM (JS, Python)"),
("full stack developer react node.js python", "CAND_0000065", "Rajesh - Data Scientist @ Google (React, Django)"),
("full stack developer react node.js python", "CAND_0000014", "Atharv - Frontend @ Zomato (React, BigQuery, OpenCV)"),
("software engineer with experience", "CAND_0000051", "Deepak - Engineering Manager @ Swiggy (14.8y, CI/CD, Java) - NO career_history"),
]
print("CROSS-ENCODER TEST RESULTS")
print("="*80)
for query, pid, description in test_cases:
p = profiles.get(pid)
if not p:
print(f"{pid}: NOT FOUND")
continue
# Use score_pair directly
score = reranker.score_pair(query, p.raw_text)
print(f"\nQuery: {query}")
print(f"PID: {pid} β€” {description}")
print(f"Text: {p.raw_text[:150]}...")
print(f"Score: {score if score is not None else 'N/A'}")
print()
# Also check the relative ordering
print("="*80)
print("RELATIVE ORDERING TEST: query='senior software engineer python java aws'")
print("="*80)
query = "senior software engineer python java aws"
results = []
for pid in ["CAND_0000088", "CAND_0000100", "CAND_0000025", "CAND_0000044", "CAND_0000065", "CAND_0000055", "CAND_0000057"]:
p = profiles.get(pid)
if p:
score = reranker.score_pair(query, p.raw_text)
p_info = f"{p.personal.name} β€” {p.professional.current_title} @ {p.professional.current_company}"
results.append((score, pid, p_info))
results.sort(key=lambda x: -x[0])
for i, (score, pid, info) in enumerate(results, 1):
print(f" #{i} {pid}: score={score:.4f} β€” {info}")