File size: 3,357 Bytes
cccf200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
"""
TaskOptimization model for storing optimization analysis results.
"""
from typing import Optional, List, Dict, Any
from datetime import datetime
from sqlmodel import SQLModel, Field, Column, JSON


class TaskOptimization(SQLModel, table=True):
    """Task optimization entity for storing AI analysis results."""

    __tablename__ = "task_optimizations"

    id: Optional[int] = Field(default=None, primary_key=True)
    user_id: int = Field(foreign_key="users.id", index=True)

    # Analysis metadata
    analysis_type: str = Field(max_length=50, index=True)  # duplicate, priority, time_estimate, grouping, automation
    task_ids: List[int] = Field(sa_column=Column(JSON))  # Tasks analyzed

    # Results
    confidence: float = Field(default=0.0, ge=0.0, le=1.0)  # Confidence score 0-1
    suggestions: Dict[str, Any] = Field(sa_column=Column(JSON))  # Analysis results

    # Status
    applied: bool = Field(default=False)  # Whether user applied the suggestion
    rejected: bool = Field(default=False)  # Whether user rejected the suggestion

    # Timestamps
    created_at: datetime = Field(default_factory=datetime.utcnow)
    updated_at: datetime = Field(default_factory=datetime.utcnow)


class DuplicateDetection(SQLModel):
    """Schema for duplicate task detection result."""

    task_ids: List[int]
    similarity_score: float = Field(ge=0.0, le=1.0)
    confidence: float = Field(ge=0.0, le=1.0)
    suggestion: str
    merge_recommendation: Optional[str] = None


class PriorityAnalysis(SQLModel):
    """Schema for priority recommendation result."""

    task_id: int
    priority: str  # high, medium, low
    confidence: float = Field(ge=0.0, le=1.0)
    reasoning: str
    keywords: List[str]


class TimeEstimate(SQLModel):
    """Schema for time estimation result."""

    task_id: int
    estimated_hours: float = Field(gt=0)
    confidence_interval: Dict[str, float]  # {min: X, max: Y}
    confidence: float = Field(ge=0.0, le=1.0)
    complexity_factors: List[str]


class TaskGrouping(SQLModel):
    """Schema for task grouping recommendation."""

    name: str
    task_ids: List[int]
    category: str
    confidence: float = Field(ge=0.0, le=1.0)
    reasoning: str


class AutomationOpportunity(SQLModel):
    """Schema for automation detection result."""

    task_ids: List[int]
    automation_type: str  # recurring, integration, api, scheduled
    confidence: float = Field(ge=0.0, le=1.0)
    suggestion: str
    implementation: str


class OptimizationRequest(SQLModel):
    """Schema for optimization request."""

    task_ids: Optional[List[int]] = None  # Specific tasks to analyze, None = all tasks
    analysis_types: Optional[List[str]] = None  # Specific analyses, None = all types


class OptimizationResponse(SQLModel):
    """Schema for optimization response."""

    duplicates: List[DuplicateDetection] = []
    priorities: List[PriorityAnalysis] = []
    time_estimates: List[TimeEstimate] = []
    groups: List[TaskGrouping] = []
    automations: List[AutomationOpportunity] = []
    total_suggestions: int
    analysis_timestamp: datetime


class OptimizationActionRequest(SQLModel):
    """Schema for applying/rejecting optimization suggestion."""

    optimization_id: int
    action: str  # apply, reject
    parameters: Optional[Dict[str, Any]] = None  # Additional parameters for applying