ketannnn commited on
Commit
c70669c
·
1 Parent(s): 3bf5119

feat: implement stage 1 candidate retrieval and scoring logic using Qdrant and multi-factor heuristics

Browse files
Files changed (1) hide show
  1. backend/src/matching/stage1.py +4 -3
backend/src/matching/stage1.py CHANGED
@@ -1,6 +1,6 @@
1
  from typing import Any
2
  from qdrant_client import QdrantClient
3
- from qdrant_client.models import Filter, FieldCondition, MatchValue, Range
4
  from sqlalchemy.ext.asyncio import AsyncSession
5
  from sqlalchemy import select
6
 
@@ -20,8 +20,9 @@ def _build_qdrant_filter(jd: dict, session_id: str | None) -> Filter | None:
20
  conditions = []
21
  if session_id:
22
  conditions.append(FieldCondition(key="session_id", match=MatchValue(value=session_id)))
23
- if jd.get("min_yoe") is not None:
24
- conditions.append(FieldCondition(key="years_of_experience", range=Range(gte=max(0, jd["min_yoe"] - 2))))
 
25
  if not conditions:
26
  return None
27
  return Filter(must=conditions)
 
1
  from typing import Any
2
  from qdrant_client import QdrantClient
3
+ from qdrant_client.models import Filter, FieldCondition, MatchValue
4
  from sqlalchemy.ext.asyncio import AsyncSession
5
  from sqlalchemy import select
6
 
 
20
  conditions = []
21
  if session_id:
22
  conditions.append(FieldCondition(key="session_id", match=MatchValue(value=session_id)))
23
+ # NOTE: YOE is intentionally NOT pre-filtered here.
24
+ # Under-qualified candidates are penalised via the `yoe` component score (weight 0.15)
25
+ # instead of being silently excluded from results entirely.
26
  if not conditions:
27
  return None
28
  return Filter(must=conditions)