mentorme / models /schemas.py
Doanh Van Vu
Enhance RecommendationRequest model and mentee query text generation
a4869e5
from pydantic import BaseModel, Field
from typing import List, Optional, Dict, Any, Union
class SkillDto(BaseModel):
id: Optional[int] = None
name: str
class DomainDto(BaseModel):
id: Optional[int] = None
name: str
class CareerDto(BaseModel):
id: Optional[int] = None
name: str
class ExperienceDto(BaseModel):
company: Optional[str] = None
position: Optional[str] = None
start_date: Optional[str] = None
end_date: Optional[str] = None
description: Optional[str] = None
class EducationDto(BaseModel):
school: Optional[str] = None
degree: Optional[str] = None
start_date: Optional[str] = None
end_date: Optional[str] = None
description: Optional[str] = None
class MentorUpsertRequest(BaseModel):
mentor_id: int
full_name: Optional[str] = None
bio: Optional[str] = None
career: Optional[Union[CareerDto, Dict[str, Any], str]] = None
skills: Optional[List[Union[SkillDto, Dict[str, Any], str]]] = None
domains: Optional[List[Union[DomainDto, Dict[str, Any], str]]] = None
experiences: Optional[List[Union[ExperienceDto, Dict[str, Any]]]] = None
educations: Optional[List[Union[EducationDto, Dict[str, Any]]]] = None
rating: Optional[float] = Field(None, ge=0.0, le=5.0)
total_ratings: Optional[int] = Field(None, ge=0)
session_count: Optional[int] = Field(None, ge=0)
career_id: Optional[int] = None
skill_ids: Optional[List[int]] = None
domain_ids: Optional[List[int]] = None
status: Optional[str] = "ACTIVATED"
class MentorUpsertResponse(BaseModel):
success: bool
message: str
mentor_id: int
class RecommendationRequest(BaseModel):
goals: Optional[str] = None
skill_ids: Optional[List[int]] = None
domain_ids: Optional[List[int]] = None
mentor_domain_ids: Optional[List[int]] = None
career_id: Optional[int] = None
career_name: Optional[str] = None
domain_names: Optional[List[str]] = None
mentor_domain_names: Optional[List[str]] = None
skill_names: Optional[List[str]] = None
top_k: Optional[int] = Field(None, ge=1, le=100)
final_count: Optional[int] = Field(None, ge=1, le=20)
class RecommendedMentor(BaseModel):
mentor_id: str
score: float
semantic_similarity: float
reason: str
metadata: Dict[str, Any]
class RecommendationResponse(BaseModel):
mentors: List[RecommendedMentor]
count: int
query_text: Optional[str] = None
class HealthResponse(BaseModel):
status: str
embedding_model: Dict[str, Any]
pinecone_index: Dict[str, Any]
class BatchUpsertRequest(BaseModel):
mentors: List[MentorUpsertRequest]
class BatchUpsertResponse(BaseModel):
success: bool
message: str
upserted_count: int
failed_count: int