MemPrepMate / src /models /__init__.py
Christian Kniep
update to v2
5d3ee93
"""
Data models for Profile and Contact Management UI.
Feature: 012-profile-contact-ui
"""
from dataclasses import dataclass
from datetime import datetime
from typing import Literal, Optional
@dataclass
class UserProfile:
"""User profile entity."""
user_id: str
display_name: str
profile_picture_url: Optional[str]
created_at: datetime
last_login: datetime
session_id: str # Format: {user_id}_session
@dataclass
class ContactSession:
"""Contact session entity."""
session_id: str # Format: {user_id}_{UUID_v4}
user_id: str
contact_id: str # Contact identifier (maps to project_id in v2 backend)
contact_name: str
contact_description: Optional[str]
is_reference: bool
created_at: datetime
last_interaction: datetime
normalized_name: Optional[str] = None # Feature: 001-refine-memory-producer-logic
sequence_number: Optional[int] = None # Feature: 001-refine-memory-producer-logic
producer_id: Optional[str] = None # Feature: 001-refine-memory-producer-logic - Format: {user_id}_{normalized_name}_{seq}
@dataclass
class Fact:
"""
Fact entity - alias for Message with mode='memorize'.
Used for semantic clarity in the application.
"""
message_id: str # UUID
session_id: str
content: str
created_at: datetime
mode: Literal["memorize"] = "memorize" # Always 'memorize' for facts
@dataclass
class Message:
"""Message entity - unified model for chat messages and facts."""
message_id: str # UUID
session_id: str
mode: Literal["chat", "memorize"] # 'chat' for messages, 'memorize' for facts
content: str
created_at: datetime
sender: Optional[Literal["user", "assistant"]] = None # Only for mode='chat'
metadata: Optional[dict] = None # Optional (e.g., LLM model, tokens)