File size: 2,256 Bytes
46db43c
 
a72fec7
46db43c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5fd3541
46db43c
 
 
 
 
 
704792a
 
46db43c
 
 
 
 
 
 
 
 
 
 
 
 
 
e117df5
 
46db43c
 
 
 
 
 
 
 
 
d34d874
 
 
 
 
704792a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46db43c
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
from typing import List, Dict, Any, Optional
from pydantic import BaseModel
import os


# ────────────────────────────── Response Models ──────────────────────────────
class ProjectResponse(BaseModel):
    project_id: str
    user_id: str
    name: str
    description: str
    created_at: str
    updated_at: str

class ProjectsListResponse(BaseModel):
    projects: List[ProjectResponse]

class ChatMessageResponse(BaseModel):
    user_id: str
    project_id: str
    role: str
    content: str
    timestamp: float
    created_at: str
    sources: Optional[List[Dict[str, Any]]] = None
    is_report: Optional[bool] = False

class ChatHistoryResponse(BaseModel):
    messages: List[ChatMessageResponse]

class MessageResponse(BaseModel):
    message: str
    quiz: Optional[Dict[str, Any]] = None
    results: Optional[Dict[str, Any]] = None

class UploadResponse(BaseModel):
    job_id: str
    status: str
    total_files: Optional[int] = None

class FileSummaryResponse(BaseModel):
    filename: str
    summary: str

class ChatAnswerResponse(BaseModel):
    answer: str
    sources: List[Dict[str, Any]]
    relevant_files: Optional[List[str]] = None
    session_name: Optional[str] = None
    session_id: Optional[str] = None

class HealthResponse(BaseModel):
    ok: bool

class ReportResponse(BaseModel):
    filename: str
    report_markdown: str
    sources: List[Dict[str, Any]]

class StatusUpdateResponse(BaseModel):
    status: str
    message: str
    progress: Optional[int] = None

class QuizQuestionResponse(BaseModel):
    type: str  # "mcq" or "self_reflect"
    question: str
    options: Optional[List[str]] = None  # For MCQ questions
    correct_answer: Optional[int] = None  # For MCQ questions
    topic: str
    complexity: str

class QuizResponse(BaseModel):
    quiz_id: str
    user_id: str
    project_id: str
    questions: List[QuizQuestionResponse]
    time_limit: int
    documents: List[str]
    created_at: str
    status: str

class QuizResultResponse(BaseModel):
    questions: List[Dict[str, Any]]
    total_score: float
    correct_count: int
    partial_count: int
    incorrect_count: int