Spaces:
Sleeping
Sleeping
| """ | |
| Chat Session Models for OpenTriage Mentorship. | |
| """ | |
| from pydantic import BaseModel, Field | |
| from typing import Optional, List | |
| from datetime import datetime, timezone | |
| from enum import Enum | |
| import uuid | |
| class SessionType(str, Enum): | |
| ONE_ON_ONE = "one_on_one" | |
| GROUP = "group" | |
| ISSUE_HELP = "issue_help" | |
| class SessionStatus(str, Enum): | |
| ACTIVE = "active" | |
| PAUSED = "paused" | |
| COMPLETED = "completed" | |
| CANCELLED = "cancelled" | |
| class ChatSession(BaseModel): | |
| """A mentorship chat session.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| # Participants | |
| mentor_id: str | |
| mentor_username: str | |
| mentee_ids: List[str] = [] # Can have multiple for group sessions | |
| mentee_usernames: List[str] = [] | |
| # Type and context | |
| session_type: SessionType = SessionType.ONE_ON_ONE | |
| issue_id: Optional[str] = None | |
| repo_name: Optional[str] = None | |
| topic: Optional[str] = None | |
| # Status | |
| status: SessionStatus = SessionStatus.ACTIVE | |
| # Timestamps | |
| started_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| ended_at: Optional[datetime] = None | |
| last_activity_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| # Summary (AI-generated) | |
| summary: Optional[str] = None | |
| key_points: List[str] = [] | |
| resources_shared: List[str] = [] # Resource IDs | |
| # Stats | |
| message_count: int = 0 | |
| duration_minutes: int = 0 | |
| class ChatMessage(BaseModel): | |
| """A message in a chat session.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| session_id: str | |
| # Sender | |
| sender_id: str | |
| sender_username: str | |
| is_mentor: bool = False | |
| # Content | |
| content: str | |
| message_type: str = "text" # text, code, link, file | |
| # Metadata | |
| language: Optional[str] = None # For code blocks | |
| attachments: List[str] = [] | |
| # Reactions | |
| reactions: dict = {} # {emoji: [user_ids]} | |
| # AI features | |
| is_ai_generated: bool = False | |
| contains_resource: bool = False | |
| extracted_resource_id: Optional[str] = None | |
| timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| edited_at: Optional[datetime] = None | |
| class SessionSummary(BaseModel): | |
| """AI-generated summary of a chat session.""" | |
| session_id: str | |
| # Summary content | |
| overview: str | |
| topics_discussed: List[str] = [] | |
| key_takeaways: List[str] = [] | |
| action_items: List[str] = [] | |
| # Resources | |
| resources_shared: List[str] = [] | |
| code_snippets_count: int = 0 | |
| links_shared: int = 0 | |
| # Metrics | |
| total_messages: int = 0 | |
| mentor_messages: int = 0 | |
| mentee_messages: int = 0 | |
| duration_minutes: int = 0 | |
| generated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |