OpenTriage_AI / models /mentor.py
KrishnaCosmic's picture
deployment
ce673e5
"""
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))