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 |