File size: 5,979 Bytes
1941764
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
"""
AI-powered task management endpoints using Cohere.

This module provides REST API endpoints for AI features:
- Task suggestions
- Smart auto-completion
- Task categorization
- Description enhancement
- Complexity analysis
"""

from fastapi import APIRouter, HTTPException, Depends
from pydantic import BaseModel, Field
from typing import List, Dict, Optional
from src.services.cohere_ai import cohere_service
from src.middleware.jwt_auth import get_current_user

router = APIRouter()


# Request/Response Models
class TaskSuggestionRequest(BaseModel):
    context: str = Field(..., description="Context to generate suggestions from")
    count: int = Field(default=5, ge=1, le=10, description="Number of suggestions")


class TaskSuggestionResponse(BaseModel):
    suggestions: List[str]


class EnhanceDescriptionRequest(BaseModel):
    title: str = Field(..., description="Task title")
    description: str = Field(default="", description="Current description")


class EnhanceDescriptionResponse(BaseModel):
    enhanced_description: str


class CategorizeTaskRequest(BaseModel):
    title: str = Field(..., description="Task title")
    description: str = Field(default="", description="Task description")


class CategorizeTaskResponse(BaseModel):
    category: str
    priority: str
    tags: List[str]


class AutoCompleteRequest(BaseModel):
    partial_title: str = Field(..., description="Partial task title")


class AutoCompleteResponse(BaseModel):
    completions: List[str]


class AnalyzeComplexityRequest(BaseModel):
    title: str = Field(..., description="Task title")
    description: str = Field(default="", description="Task description")


class AnalyzeComplexityResponse(BaseModel):
    complexity: str
    estimated_time: str
    needs_subtasks: bool


# Endpoints
@router.post("/suggestions", response_model=TaskSuggestionResponse)
async def generate_task_suggestions(
    request: TaskSuggestionRequest,
    current_user: dict = Depends(get_current_user)
):
    """
    Generate AI-powered task suggestions based on context.

    Requires authentication.
    """
    try:
        suggestions = cohere_service.generate_task_suggestions(
            context=request.context,
            count=request.count
        )

        if not suggestions:
            raise HTTPException(
                status_code=500,
                detail="Failed to generate suggestions. Please try again."
            )

        return TaskSuggestionResponse(suggestions=suggestions)

    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Error generating suggestions: {str(e)}"
        )


@router.post("/enhance-description", response_model=EnhanceDescriptionResponse)
async def enhance_task_description(
    request: EnhanceDescriptionRequest,
    current_user: dict = Depends(get_current_user)
):
    """
    Enhance a task description with AI to make it more clear and actionable.

    Requires authentication.
    """
    try:
        enhanced = cohere_service.enhance_task_description(
            title=request.title,
            description=request.description
        )

        return EnhanceDescriptionResponse(enhanced_description=enhanced)

    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Error enhancing description: {str(e)}"
        )


@router.post("/categorize", response_model=CategorizeTaskResponse)
async def categorize_task(
    request: CategorizeTaskRequest,
    current_user: dict = Depends(get_current_user)
):
    """
    Categorize a task and suggest priority level using AI.

    Requires authentication.
    """
    try:
        result = cohere_service.categorize_task(
            title=request.title,
            description=request.description
        )

        return CategorizeTaskResponse(**result)

    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Error categorizing task: {str(e)}"
        )


@router.post("/autocomplete", response_model=AutoCompleteResponse)
async def autocomplete_task(
    request: AutoCompleteRequest,
    current_user: dict = Depends(get_current_user)
):
    """
    Provide smart auto-completion suggestions for task titles.

    Requires authentication.
    """
    try:
        completions = cohere_service.smart_complete_task(
            partial_title=request.partial_title
        )

        return AutoCompleteResponse(completions=completions)

    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Error generating completions: {str(e)}"
        )


@router.post("/analyze-complexity", response_model=AnalyzeComplexityResponse)
async def analyze_task_complexity(
    request: AnalyzeComplexityRequest,
    current_user: dict = Depends(get_current_user)
):
    """
    Analyze task complexity and provide time estimates using AI.

    Requires authentication.
    """
    try:
        result = cohere_service.analyze_task_complexity(
            title=request.title,
            description=request.description
        )

        return AnalyzeComplexityResponse(**result)

    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Error analyzing complexity: {str(e)}"
        )


@router.get("/health")
async def ai_health_check():
    """
    Check if AI service is properly configured.

    Does not require authentication.
    """
    try:
        import os
        api_key = os.getenv("COHERE_API_KEY")

        if not api_key:
            return {
                "status": "error",
                "message": "COHERE_API_KEY not configured"
            }

        return {
            "status": "healthy",
            "message": "AI service is configured and ready",
            "provider": "Cohere"
        }

    except Exception as e:
        return {
            "status": "error",
            "message": str(e)
        }