File size: 2,576 Bytes
5c244a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
AIRequest model for tracking AI feature usage.
"""
from datetime import datetime
from enum import Enum
from typing import Optional
from uuid import UUID, uuid4

from sqlmodel import Column, DateTime, Field, ForeignKey, SQLModel, Text
from sqlalchemy import text, Index


class AIRequestType(str, Enum):
    """Types of AI requests."""

    GENERATE_TODO = 'generate_todo'
    SUMMARIZE = 'summarize'
    PRIORITIZE = 'prioritize'


class AIRequest(SQLModel, table=True):
    """
    AIRequest model for tracking AI feature usage.

    Attributes:
        id: Unique request identifier (UUID)
        user_id: User who made the request (foreign key)
        request_type: Type of AI request
        input_data: Input data sent to AI
        output_data: Output data from AI
        model_used: AI model used for processing
        tokens_used: Optional number of tokens used
        processing_time_ms: Processing time in milliseconds
        created_at: Request timestamp
    """

    __tablename__ = 'ai_requests'

    id: UUID = Field(
        default_factory=uuid4,
        primary_key=True,
        index=True,
        description='Unique request identifier',
    )
    user_id: UUID = Field(
        default=None,
        foreign_key='users.id',
        nullable=False,
        index=True,
        description='User who made the request',
    )
    request_type: AIRequestType = Field(
        description='Type of AI request',
    )
    input_data: str = Field(
        sa_column=Column(Text),
        description='Input data sent to AI',
    )
    output_data: Optional[str] = Field(
        default=None,
        sa_column=Column(Text),
        description='Output data from AI',
    )
    model_used: str = Field(
        max_length=100,
        description='AI model used',
    )
    tokens_used: Optional[int] = Field(
        default=None,
        description='Number of tokens used',
    )
    processing_time_ms: Optional[int] = Field(
        default=None,
        description='Processing time in milliseconds',
    )
    created_at: datetime = Field(
        default_factory=datetime.utcnow,
        sa_column=Column(DateTime(), server_default=text('CURRENT_TIMESTAMP')),
        description='Request timestamp',
    )

    # Define indexes
    __table_args__ = (
        Index('idx_ai_requests_user_type', 'user_id', 'request_type'),
        Index('idx_ai_requests_created', 'created_at'),
    )

    def __repr__(self) -> str:
        return f'<AIRequest {self.request_type}>'


# Export for use in other modules
__all__ = ['AIRequest', 'AIRequestType']