| from uuid import UUID | |
| from typing import Any | |
| from pydantic import BaseModel | |
| class CandidateResponse(BaseModel): | |
| id: UUID | |
| name: str | None = None | |
| email: str | None = None | |
| role_type: str | None = None | |
| engineer_type: str | None = None | |
| years_of_experience: float | None = None | |
| most_recent_company: str | None = None | |
| parsed_summary: str | None = None | |
| parsed_skills: str | None = None | |
| programming_languages: list[str] = [] | |
| backend_frameworks: list[str] = [] | |
| frontend_technologies: list[str] = [] | |
| growth_velocity: float = 0.5 | |
| gen_ai_experience: bool | None = None | |
| looking_for: str | None = None | |
| open_to_working_at: str | None = None | |
| is_actively_or_passively_looking: str | None = None | |
| model_config = {"from_attributes": True} | |
| class UploadResponse(BaseModel): | |
| task_id: str # First task ID (backward compat) | |
| task_ids: list[str] = [] # ALL task IDs — poll all to confirm full ingestion | |
| queued: int | |
| message: str | |
| class TaskStatusResponse(BaseModel): | |
| task_id: str | |
| status: str | |
| result: Any | None = None | |