Spaces:
Runtime error
Runtime error
File size: 3,120 Bytes
148b563 02427e3 148b563 02427e3 3d08a7e cc78da3 3d08a7e cc78da3 3d08a7e b13c030 df79db8 | 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 | from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, EmailStr, Field, ConfigDict, field_validator
class UserCreate(BaseModel):
model_config = ConfigDict(extra="forbid")
email: EmailStr
password: str = Field(min_length=8, max_length=128)
@field_validator("password")
@classmethod
def password_strength(cls, v: str) -> str:
if not any(c.isdigit() for c in v) or not any(c.isalpha() for c in v):
raise ValueError("must contain at least one letter and one digit")
if len(v.encode("utf-8")) > 72:
raise ValueError("must be at most 72 bytes when encoded as UTF-8")
return v
class UserLogin(BaseModel):
email: EmailStr
password: str
class TokenResponse(BaseModel):
access_token: str
token_type: str = "bearer"
expires_in: int
class UserResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: UUID
email: EmailStr
role: str
created_at: datetime
class ChangePasswordRequest(BaseModel):
model_config = ConfigDict(extra="forbid")
current_password: str
new_password: str = Field(min_length=8, max_length=128)
@field_validator("new_password")
@classmethod
def password_strength(cls, v: str) -> str:
if not any(c.isdigit() for c in v) or not any(c.isalpha() for c in v):
raise ValueError("must contain at least one letter and one digit")
if len(v.encode("utf-8")) > 72:
raise ValueError("must be at most 72 bytes when encoded as UTF-8")
return v
class HubCreate(BaseModel):
model_config = ConfigDict(extra="forbid")
name: str = Field(min_length=1, max_length=120)
description: str | None = Field(default=None, max_length=500)
content: str = Field(default="", max_length=20000)
class DocumentSummary(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: UUID
origin: str
filename: str
status: str
chunk_count: int = 0
class HubResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: UUID
name: str
description: str | None
ai_summary: str | None
suggested_questions: list[str]
document_count: int = 0
chunk_count: int = 0
created_at: datetime
updated_at: datetime
class HubDetail(HubResponse):
documents: list[DocumentSummary] = []
class DocumentResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: UUID
hub_id: UUID
origin: str
filename: str
mime_type: str
size_bytes: int
status: str
error_message: str | None
chunk_count: int = 0
created_at: datetime
updated_at: datetime
class QueryRequest(BaseModel):
model_config = ConfigDict(extra="forbid")
question: str = Field(min_length=3, max_length=1000)
class QuerySource(BaseModel):
document_id: UUID
filename: str
chunk_index: int
class QueryResponse(BaseModel):
hub_id: UUID
question: str
answer: str
evidence: str | None
model: str
grounded: bool
sources: list[QuerySource] = []
retrieved_chunks: int = 0 |