- Бэкенд: FastAPI + SQLAlchemy async + PostgreSQL, JWT-аутентификация, Qdrant multi-tenant векторное хранилище, Celery воркер - Фронтенд: React + Vite + TypeScript SPA (логин, регистрация, дашборд, поиск по коллекциям, настройки) - Инфраструктура: docker-compose, Helm-чарт, GitHub Actions CI, Prometheus/Grafana мониторинг - Embedding через OpenRouter (nvidia/llama-nemotron-embed-vl-1b-v2:free) - LLM: google/gemma-4-31b-it:free через OpenRouter
66 lines
1.1 KiB
Python
66 lines
1.1 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, EmailStr
|
|
|
|
|
|
class RegisterRequest(BaseModel):
|
|
email: EmailStr
|
|
password: str
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
email: EmailStr
|
|
password: str
|
|
|
|
|
|
class TokenResponse(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
|
|
|
|
class UserResponse(BaseModel):
|
|
id: uuid.UUID
|
|
email: str
|
|
api_key: str
|
|
plan: str
|
|
created_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class CollectionCreate(BaseModel):
|
|
name: str
|
|
|
|
|
|
class CollectionResponse(BaseModel):
|
|
id: uuid.UUID
|
|
user_id: uuid.UUID
|
|
name: str
|
|
ticket_count: int
|
|
created_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class TicketMessage(BaseModel):
|
|
role: str
|
|
text: str
|
|
|
|
|
|
class TicketInput(BaseModel):
|
|
ticket_id: str
|
|
category: str = ""
|
|
description: str = ""
|
|
client: str = ""
|
|
messages: list[TicketMessage] = []
|
|
|
|
|
|
class TicketsUpload(BaseModel):
|
|
tickets: list[TicketInput]
|
|
|
|
|
|
class TicketsUploadResponse(BaseModel):
|
|
processed: int
|
|
skipped: int
|
|
collection_ticket_count: int
|