Files
language-llm/backend/app/schemas.py
Dennis Thiessen a708f84a07
Some checks failed
Deploy FluentGerman.ai / deploy (push) Failing after 51s
updated voice, avatar and frontend to reflect changes
2026-02-16 20:23:46 +01:00

94 lines
2.8 KiB
Python

"""FluentGerman.ai — Pydantic request/response schemas."""
from datetime import datetime
from pydantic import BaseModel, EmailStr
# ── Auth ──────────────────────────────────────────────────────────────
class Token(BaseModel):
access_token: str
token_type: str = "bearer"
class LoginRequest(BaseModel):
username: str
password: str
# ── User ──────────────────────────────────────────────────────────────
class UserCreate(BaseModel):
username: str
email: EmailStr
password: str
class UserUpdate(BaseModel):
username: str | None = None
email: EmailStr | None = None
password: str | None = None
is_active: bool | None = None
class UserOut(BaseModel):
id: int
username: str
email: str
is_admin: bool
is_active: bool
created_at: datetime
model_config = {"from_attributes": True}
# ── Instruction ───────────────────────────────────────────────────────
class InstructionCreate(BaseModel):
user_id: int | None = None
title: str
content: str
type: str = "personal" # global | personal | homework
class InstructionUpdate(BaseModel):
title: str | None = None
content: str | None = None
type: str | None = None
class InstructionOut(BaseModel):
id: int
user_id: int | None
title: str
content: str
type: str
created_at: datetime
model_config = {"from_attributes": True}
# ── Dashboard ────────────────────────────────────────────────────────
class DashboardOut(BaseModel):
username: str
latest_instruction_at: datetime | None = None
# ── Chat ──────────────────────────────────────────────────────────────
class ChatMessage(BaseModel):
role: str # "user" | "assistant"
content: str
class ChatRequest(BaseModel):
message: str
history: list[ChatMessage] = []
# ── Voice / Admin ────────────────────────────────────────────────────
class VoiceInstructionRequest(BaseModel):
raw_text: str
class VoiceConfigOut(BaseModel):
voice_mode: str # "api" | "browser"
voice_api_available: bool = False # True if API STT (Whisper) is configured