todo_chatbot / src /models /priority_recommendation.py
Awais68
Deploy FastAPI backend with MCP and OpenAI agents
cccf200
Raw
History Blame Contribute Delete
3.85 kB
"""
PriorityRecommendation model for storing AI-suggested task priorities.
"""
from typing import Optional, List
from datetime import datetime
from sqlmodel import SQLModel, Field, Column, JSON
from enum import Enum
class PriorityLevel(str, Enum):
"""Priority levels for tasks."""
HIGH = "high"
MEDIUM = "medium"
LOW = "low"
class PriorityRecommendation(SQLModel, table=True):
"""Priority recommendation entity for AI-suggested task priorities."""
__tablename__ = "priority_recommendations"
id: Optional[int] = Field(default=None, primary_key=True)
user_id: int = Field(foreign_key="users.id", index=True)
task_id: int = Field(foreign_key="tasks.id", index=True)
# Recommendation details
recommended_priority: str = Field(max_length=20) # high, medium, low
current_priority: Optional[str] = Field(default=None, max_length=20)
confidence: float = Field(default=0.0, ge=0.0, le=1.0) # Confidence score 0-1
# Analysis details
reasoning: str = Field(max_length=500) # Explanation for the recommendation
keywords: List[str] = Field(sa_column=Column(JSON)) # Keywords that influenced priority
factors: dict = Field(sa_column=Column(JSON)) # Additional factors considered
# User action
applied: bool = Field(default=False) # Whether user applied the recommendation
rejected: bool = Field(default=False) # Whether user rejected the recommendation
user_feedback: Optional[str] = Field(default=None, max_length=500)
# Timestamps
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
applied_at: Optional[datetime] = None
class PriorityRecommendationCreate(SQLModel):
"""Schema for creating a priority recommendation."""
task_id: int
recommended_priority: str
confidence: float = Field(ge=0.0, le=1.0)
reasoning: str = Field(max_length=500)
keywords: List[str] = []
factors: dict = {}
class PriorityRecommendationUpdate(SQLModel):
"""Schema for updating a priority recommendation."""
applied: Optional[bool] = None
rejected: Optional[bool] = None
user_feedback: Optional[str] = Field(default=None, max_length=500)
class PriorityRecommendationResponse(SQLModel):
"""Schema for priority recommendation response."""
id: int
user_id: int
task_id: int
recommended_priority: str
current_priority: Optional[str]
confidence: float
reasoning: str
keywords: List[str]
factors: dict
applied: bool
rejected: bool
user_feedback: Optional[str]
created_at: datetime
updated_at: datetime
applied_at: Optional[datetime]
class PriorityAnalysisRequest(SQLModel):
"""Schema for requesting priority analysis."""
task_ids: Optional[List[int]] = None # Specific tasks to analyze, None = all tasks
include_completed: bool = False # Whether to include completed tasks
min_confidence: float = Field(default=0.5, ge=0.0, le=1.0) # Minimum confidence threshold
class PriorityAnalysisResult(SQLModel):
"""Schema for priority analysis results."""
task_id: int
task_title: str
recommended_priority: str
confidence: float
reasoning: str
keywords: List[str]
change_required: bool # True if current priority differs from recommended
class PriorityDistribution(SQLModel):
"""Schema for priority distribution statistics."""
high_count: int
medium_count: int
low_count: int
unassigned_count: int
total_count: int
recommendations_pending: int
recommendations_applied: int
recommendations_rejected: int
class PriorityKeywordAnalysis(SQLModel):
"""Schema for keyword-based priority analysis."""
keyword: str
frequency: int
average_priority: str
tasks_with_keyword: List[int]