Spaces:
Sleeping
Sleeping
| """ | |
| Mentor Matching Models for OpenTriage. | |
| """ | |
| from pydantic import BaseModel, Field | |
| from typing import Optional, List | |
| from datetime import datetime, timezone | |
| from enum import Enum | |
| import uuid | |
| class ExpertiseLevel(str, Enum): | |
| BEGINNER = "beginner" | |
| INTERMEDIATE = "intermediate" | |
| ADVANCED = "advanced" | |
| EXPERT = "expert" | |
| class MentorProfile(BaseModel): | |
| """Profile for users who can mentor others.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| user_id: str | |
| username: str | |
| # Technical expertise | |
| tech_stack: List[str] = [] # e.g., ["python", "react", "typescript"] | |
| languages: List[str] = [] # Programming languages | |
| frameworks: List[str] = [] # Frameworks/libraries | |
| expertise_level: ExpertiseLevel = ExpertiseLevel.INTERMEDIATE | |
| # Availability | |
| availability_hours_per_week: int = 5 | |
| timezone: Optional[str] = None | |
| is_active: bool = True | |
| # Profile info | |
| bio: str = "" # About the mentor | |
| avatar_url: Optional[str] = None | |
| # Stats | |
| mentee_count: int = 0 | |
| sessions_completed: int = 0 | |
| avg_rating: float = 0.0 | |
| total_ratings: int = 0 | |
| # Preferences | |
| max_mentees: int = 3 | |
| preferred_topics: List[str] = [] | |
| created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| class MentorMatch(BaseModel): | |
| """A match between a mentor and mentee.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| mentor_id: str | |
| mentor_username: str | |
| mentee_id: str | |
| mentee_username: str | |
| # Match quality | |
| compatibility_score: float # 0-100 | |
| matched_skills: List[str] = [] # Overlapping tech stack | |
| match_reason: str = "" | |
| # Context | |
| issue_id: Optional[str] = None | |
| repo_name: Optional[str] = None | |
| # Status | |
| status: str = "suggested" # suggested, accepted, declined, completed | |
| created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| class MentorshipRequest(BaseModel): | |
| """Request from a mentee to connect with a mentor.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| mentee_id: str | |
| mentee_username: str = "" | |
| mentor_id: str | |
| mentor_username: str = "" | |
| issue_id: Optional[str] = None | |
| message: str = "" | |
| status: str = "pending" # pending, accepted, declined | |
| created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| class MentorRating(BaseModel): | |
| """Rating given to a mentor after a session.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| mentor_id: str | |
| mentee_id: str | |
| session_id: Optional[str] = None | |
| rating: int # 1-5 | |
| feedback: Optional[str] = None | |
| created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |