Spaces:
Running
Running
| """ | |
| Database Model Schemas (for reference and validation) | |
| These mirror the Supabase schema for type safety. | |
| """ | |
| from typing import Any, Dict, List, Optional | |
| from datetime import datetime, date, time | |
| from uuid import UUID | |
| from pydantic import BaseModel, Field | |
| class UserProfile(BaseModel): | |
| """User profile with personality parameters""" | |
| id: UUID | |
| user_id: UUID | |
| email: Optional[str] = None | |
| name: Optional[str] = None | |
| timezone: str = "UTC" | |
| active_hours_start: time = Field(default_factory=lambda: time(8, 0)) | |
| active_hours_end: time = Field(default_factory=lambda: time(22, 0)) | |
| dnd_enabled: bool = False | |
| dnd_start: time = Field(default_factory=lambda: time(22, 0)) | |
| dnd_end: time = Field(default_factory=lambda: time(8, 0)) | |
| interests: List[str] = Field(default_factory=list) | |
| behavioral_patterns: Dict[str, Any] = Field(default_factory=dict) | |
| personality_params: Dict[str, Any] = Field(default_factory=dict) | |
| preference_history: List[Dict[str, Any]] = Field(default_factory=list) | |
| created_at: datetime | |
| updated_at: datetime | |
| class Interaction(BaseModel): | |
| """Interaction record with quality scores""" | |
| id: UUID | |
| user_id: UUID | |
| session_id: Optional[UUID] = None | |
| interaction_type: str | |
| input_text: Optional[str] = None | |
| input_metadata: Dict[str, Any] = Field(default_factory=dict) | |
| intent_class: Optional[str] = None | |
| emotion_scores: Dict[str, float] = Field(default_factory=dict) | |
| stress_score: float = 0.0 | |
| chain_used: str | |
| model_used: Optional[str] = None | |
| latency_ms: Optional[int] = None | |
| tokens_used: Optional[int] = None | |
| response_text: Optional[str] = None | |
| response_metadata: Dict[str, Any] = Field(default_factory=dict) | |
| personality_mode: Optional[str] = None | |
| quality_accuracy_score: Optional[float] = None | |
| quality_helpfulness_score: Optional[float] = None | |
| quality_personality_fit_score: Optional[float] = None | |
| sources_used: List[Dict[str, Any]] = Field(default_factory=list) | |
| context_tiers: Dict[str, Any] = Field(default_factory=dict) | |
| created_at: datetime | |
| class KnowledgeBase(BaseModel): | |
| """Semantic knowledge store""" | |
| id: UUID | |
| user_id: UUID | |
| content: str | |
| content_type: str # fact, preference, insight, pattern | |
| category: Optional[str] = None | |
| source_interaction_id: Optional[UUID] = None | |
| source_type: Optional[str] = None | |
| source_metadata: Dict[str, Any] = Field(default_factory=dict) | |
| # embedding: List[float] # 768-dim vector, handled separately | |
| access_count: int = 0 | |
| last_accessed: Optional[datetime] = None | |
| confidence_score: float = 0.8 | |
| quality_score: float = 0.8 | |
| created_at: datetime | |
| updated_at: datetime | |
| expires_at: Optional[datetime] = None | |
| class NewsArticle(BaseModel): | |
| """Processed news article""" | |
| id: UUID | |
| user_id: UUID | |
| title: str | |
| summary: Optional[str] = None | |
| content_hash: Optional[str] = None | |
| url: Optional[str] = None | |
| source_name: Optional[str] = None | |
| source_type: Optional[str] = None | |
| original_text: Optional[str] = None | |
| bart_summary: Optional[str] = None | |
| entities: List[Dict[str, Any]] = Field(default_factory=list) | |
| topics: List[str] = Field(default_factory=list) | |
| # embedding: List[float] | |
| urgency_score: Optional[int] = None | |
| relevance_score: Optional[float] = None | |
| interest_match: Dict[str, Any] = Field(default_factory=dict) | |
| processed: bool = False | |
| delivered: bool = False | |
| delivery_method: Optional[str] = None | |
| published_at: Optional[datetime] = None | |
| fetched_at: datetime | |
| processed_at: Optional[datetime] = None | |
| expires_at: Optional[datetime] = None | |
| class EventQueue(BaseModel): | |
| """Proactive event queue""" | |
| id: UUID | |
| user_id: UUID | |
| event_type: str | |
| urgency: int | |
| source_agent: str | |
| title: str | |
| body: Optional[str] = None | |
| tillu_message: Optional[str] = None | |
| structured_data: Dict[str, Any] = Field(default_factory=dict) | |
| sources: List[Dict[str, Any]] = Field(default_factory=list) | |
| actions: List[str] = Field(default_factory=list) | |
| personality_mode: Optional[str] = None | |
| deliver_after: datetime | |
| expires_at: Optional[datetime] = None | |
| require_ack: bool = False | |
| target_client_id: Optional[UUID] = None | |
| status: str = "pending" | |
| delivered_at: Optional[datetime] = None | |
| acknowledged_at: Optional[datetime] = None | |
| dedup_key: Optional[str] = None | |
| generated_at: datetime | |
| class ResearchSession(BaseModel): | |
| """Research session record""" | |
| id: UUID | |
| user_id: UUID | |
| query: str | |
| research_plan: Dict[str, Any] = Field(default_factory=dict) | |
| search_results: List[Dict[str, Any]] = Field(default_factory=list) | |
| scraped_content: List[Dict[str, Any]] = Field(default_factory=list) | |
| synthesis: Optional[str] = None | |
| critique: Dict[str, Any] = Field(default_factory=dict) | |
| iteration_count: int = 0 | |
| full_synthesis: Dict[str, Any] = Field(default_factory=dict) | |
| executive_summary: Optional[str] = None | |
| citations: List[Dict[str, Any]] = Field(default_factory=list) | |
| # embedding: List[float] | |
| status: str = "pending" | |
| created_at: datetime | |
| completed_at: Optional[datetime] = None | |
| class TaskGoal(BaseModel): | |
| """Task or goal with probability scoring""" | |
| id: UUID | |
| user_id: UUID | |
| title: str | |
| description: Optional[str] = None | |
| type: str # task, goal, habit, project | |
| category: Optional[str] = None | |
| due_date: Optional[datetime] = None | |
| start_date: Optional[datetime] = None | |
| recurrence: Optional[str] = None | |
| status: str = "active" | |
| priority: int = 3 | |
| progress_percent: int = 0 | |
| completed_at: Optional[datetime] = None | |
| probability_of_completion: float = 0.5 | |
| estimated_effort_hours: Optional[int] = None | |
| days_at_current_rate: Optional[int] = None | |
| last_nudge_at: Optional[datetime] = None | |
| nudge_count: int = 0 | |
| nudge_next_at: Optional[datetime] = None | |
| related_knowledge_ids: List[UUID] = Field(default_factory=list) | |
| tags: List[str] = Field(default_factory=list) | |
| created_at: datetime | |
| updated_at: datetime | |
| class EmotionLog(BaseModel): | |
| """Emotional state record""" | |
| id: UUID | |
| user_id: UUID | |
| joy: float = 0.0 | |
| sadness: float = 0.0 | |
| anger: float = 0.0 | |
| fear: float = 0.0 | |
| surprise: float = 0.0 | |
| disgust: float = 0.0 | |
| neutral: float = 0.0 | |
| dominant_emotion: Optional[str] = None | |
| emotion_intensity: Optional[float] = None | |
| stress_level: Optional[str] = None | |
| interaction_id: Optional[UUID] = None | |
| context: Optional[str] = None | |
| recorded_at: datetime | |
| class FinancialTracking(BaseModel): | |
| """Financial asset tracking""" | |
| id: UUID | |
| user_id: UUID | |
| asset_type: str # crypto, stock, forex, commodity | |
| symbol: str | |
| name: Optional[str] = None | |
| current_price: Optional[float] = None | |
| price_currency: str = "USD" | |
| price_history: List[Dict[str, Any]] = Field(default_factory=list) | |
| alert_threshold_pct: float = 2.0 | |
| last_alert_at: Optional[datetime] = None | |
| alert_count: int = 0 | |
| quantity_held: float = 0.0 | |
| cost_basis: Optional[float] = None | |
| source: str = "coingecko" | |
| metadata: Dict[str, Any] = Field(default_factory=dict) | |
| created_at: datetime | |
| updated_at: datetime | |
| class WebMonitor(BaseModel): | |
| """Web change monitor""" | |
| id: UUID | |
| user_id: UUID | |
| url: str | |
| name: Optional[str] = None | |
| description: Optional[str] = None | |
| check_interval_minutes: int = 30 | |
| css_selector: Optional[str] = None | |
| content_type: str = "text" | |
| last_content: Optional[str] = None | |
| last_content_hash: Optional[str] = None | |
| last_checked_at: Optional[datetime] = None | |
| last_changed_at: Optional[datetime] = None | |
| change_count: int = 0 | |
| alert_threshold: float = 0.1 | |
| notify_on_change: bool = True | |
| is_active: bool = True | |
| last_error: Optional[str] = None | |
| consecutive_errors: int = 0 | |
| created_at: datetime | |
| updated_at: datetime | |
| class PeopleKnowledge(BaseModel): | |
| """Relationship intelligence""" | |
| id: UUID | |
| user_id: UUID | |
| name: str | |
| relationship_type: Optional[str] = None | |
| contact_info: Dict[str, Any] = Field(default_factory=dict) | |
| notes: Optional[str] = None | |
| preferences: Dict[str, Any] = Field(default_factory=dict) | |
| conversation_history: List[Dict[str, Any]] = Field(default_factory=list) | |
| last_interaction_at: Optional[datetime] = None | |
| interaction_frequency: Optional[str] = None | |
| relationship_health_score: float = 0.8 | |
| birthday: Optional[date] = None | |
| anniversary: Optional[date] = None | |
| other_dates: List[Dict[str, Any]] = Field(default_factory=list) | |
| # embedding: List[float] | |
| needs_attention: bool = False | |
| suggested_actions: List[str] = Field(default_factory=list) | |
| created_at: datetime | |
| updated_at: datetime | |
| class ClientRegistry(BaseModel): | |
| """Registered client""" | |
| id: UUID | |
| user_id: UUID | |
| client_name: str | |
| client_type: str | |
| supports_text: bool = True | |
| supports_audio: bool = False | |
| supports_image: bool = False | |
| supports_document: bool = False | |
| supports_location: bool = False | |
| supports_sse: bool = False | |
| supports_websocket: bool = False | |
| preferences: Dict[str, Any] = Field(default_factory=dict) | |
| is_connected: bool = False | |
| last_connected_at: Optional[datetime] = None | |
| connection_metadata: Dict[str, Any] = Field(default_factory=dict) | |
| api_key_hash: Optional[str] = None | |
| created_at: datetime | |
| updated_at: datetime | |