| from pydantic import BaseModel |
| from typing import List, Optional, Dict, Any |
|
|
| class Candidate(BaseModel): |
| id: str |
| name: str |
| email: Optional[str] = None |
| skills: Optional[str] = None |
| experience: Optional[str] = None |
| projects: Optional[str] = None |
| education: Optional[str] = None |
| resume_text: Optional[str] = None |
| |
| data: Optional[Dict[str, Any]] = None |
|
|
| class NormalizedCandidate(BaseModel): |
| candidate_id: str |
| name: str |
| normalized_title: str |
| experience_years: float |
| primary_skills: List[str] |
| secondary_skills: List[str] |
| backend_score: float |
| frontend_score: float |
| cloud_score: float |
| database_score: float |
| notice_period_days: int |
| location: str |
| employment_status: str |
| salary_expectation: str |
| flags: List[str] |
|
|
| class RerankResult(BaseModel): |
| candidate_id: str |
| scores: Dict[str, float] |
| final_score: float |
| decision: str |
|
|
| class DeepReview(BaseModel): |
| candidate_id: str |
| verdict: str |
| why: str |
| strengths: List[str] |
| risks: List[str] |
| hidden_signal: str |
| confidence: float |
|
|
| class FinalRank(BaseModel): |
| rank: int |
| candidate_id: str |
| name: str |
| decision: str |
| reason: str |
|
|
| class FinalShortlist(BaseModel): |
| final_ranking: List[FinalRank] |
|
|
| class EvaluationRequest(BaseModel): |
| jd: str |
| candidates: List[Candidate] |
|
|
| class EvaluationResponse(BaseModel): |
| shortlist: List[FinalRank] |
| details: Dict[str, Any] |
|
|