Files
resume-agent/backend/app/resume_import_models.py

50 lines
1.4 KiB
Python

"""Contracts for reviewable PDF/DOCX resume imports."""
from __future__ import annotations
from datetime import datetime
from typing import Any, Literal
from pydantic import BaseModel, ConfigDict, Field
class ImportEvidence(BaseModel):
page: int | None = Field(default=None, ge=1)
paragraph: int | None = Field(default=None, ge=1)
text: str = Field(min_length=1, max_length=500)
class ImportFieldReview(BaseModel):
field_path: str = Field(min_length=1, max_length=256)
value: Any
confidence: float = Field(ge=0, le=1)
status: Literal["needs_review", "verified"] = "needs_review"
evidence: list[ImportEvidence] = Field(min_length=1, max_length=10)
class ParsedResumeDraft(BaseModel):
model_config = ConfigDict(extra="forbid")
document: dict[str, Any]
field_reviews: list[ImportFieldReview] = Field(default_factory=list)
class ResumeImportView(BaseModel):
id: str
session_id: str
file_name: str
mime_type: str
size_bytes: int
sha256: str
status: Literal["awaiting_review", "applied", "failed", "cancelled"]
document: dict[str, Any] | None = None
field_reviews: list[ImportFieldReview] = Field(default_factory=list)
error_code: str | None = None
created_at: datetime
updated_at: datetime
class ApplyResumeImportRequest(BaseModel):
model_config = ConfigDict(extra="forbid")
expected_revision: int = Field(ge=0)