File size: 2,626 Bytes
c9abf3f
b10bcbc
c9abf3f
dcde7f3
0bfabd3
 
 
c9abf3f
 
96b7a3d
c9abf3f
 
 
 
 
 
 
96b7a3d
 
 
 
c9abf3f
 
 
 
 
c1209d2
e1145b3
 
0bfabd3
 
e1145b3
 
 
b10bcbc
 
 
6416677
 
 
 
 
b10bcbc
 
10dbec0
 
 
 
dcde7f3
0bfabd3
 
 
 
4735086
 
0bfabd3
 
4735086
 
0bfabd3
 
dcde7f3
 
657674a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dcde7f3
 
 
eccafb0
 
 
 
 
893ff0d
 
 
 
 
 
 
 
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
from pydantic import BaseModel, EmailStr, Field, field_validator, ConfigDict
from typing import  Optional, Literal, List
from datetime import datetime
from fastapi import FastAPI, UploadFile, File

#--------Auth models--------#

class UserCreate(BaseModel):
    username: str = Field(..., min_length=3, max_length=50)
    email: EmailStr = Field(...)
    password: str = Field(..., min_length=6, max_length=72)

    @field_validator('password')
    def validate_password(cls, v):
        if len(v.encode("utf-8")) > 72:
            raise ValueError('Password cannot exceed 72 bytes')
        return v

class LoginRequest(BaseModel):
    email: EmailStr
    password: str

class Token(BaseModel):
    access_token: str
    token_type: str

class LoginResponse(Token):
    username: str


#--------Quiz models--------#
class Quiz_input(BaseModel):
    parsed_doc: str
    user_prompt: str
    # choice: Literal["mcq", "code"]

class QuizQuestion(BaseModel):
    question: str 
    options: List[str] = Field(..., min_items=2)
    answer: str = Field(..., description="Correct answer key")
    explanation: str
    User_response: str = Field("", alias="User_response")

class QuizOutput(BaseModel):
    quiz: List[QuizQuestion] = Field(..., description="A list of 10 generated MCQ questions.")

class IngestRequest(BaseModel):
    parsed_doc: str = Field(..., description="The main document content to embed")
    user_prompt: Optional[str] = None
    id: Optional[str] = None


class ChatMessage(BaseModel):
    role: Literal["user", "assistant", "system"] = Field(..., description="Role of the message sender")
    content: str = Field(..., min_length=1, description="Message content")

class AI_chat_input(BaseModel):
    messages: List[ChatMessage] = Field(..., description="Conversation history")
    context: str = Field(..., description="The content of the note/document to chat about")
    session_id: str | None = Field(
        None, description="The unique ID of the current chat session (optional)."
    )

class SessionCreate(BaseModel):
    pdf_id: int
    name: str = "New Chat"

class SessionResponse(BaseModel):
    id: str
    name: str
    created_at: datetime
    pdf_id: int

class MessageResponse(BaseModel):
    id: int
    role: str
    content: str
    created_at: datetime

#--------Notes page models--------#

class pdf_input(BaseModel):
    file: UploadFile = File(..., description="The PDF file to be ingested.")

class NoteInfo(BaseModel):
    id: int
    filename: str
    created_at: datetime


class VapiConfigRequest(BaseModel):
    name: str
    job_role: str
    experience: str
    level: str