Files
simple-chat-api/schemas.py
T
2026-07-03 21:54:19 +08:00

126 lines
2.9 KiB
Python

from datetime import datetime
from typing import Literal
from pydantic import BaseModel, ConfigDict, Field, field_validator
from domain import Message
class CreateSessionRequest(BaseModel):
model_config = ConfigDict(extra="forbid")
system_prompt: str | None = None
@field_validator("system_prompt")
@classmethod
def validate_system_prompt(cls, value: str | None) -> str | None:
if value is not None and not value.strip():
raise ValueError("system_prompt must not be blank")
return value
class CreateSessionResponse(BaseModel):
session_id: str
system_prompt: str
created_at: datetime
class SendMessageRequest(BaseModel):
model_config = ConfigDict(extra="forbid")
content: str
@field_validator("content")
@classmethod
def validate_content(cls, value: str) -> str:
if not value.strip():
raise ValueError("content must not be blank")
return value
class TokenUsage(BaseModel):
prompt_tokens: int
completion_tokens: int
total_tokens: int
class FinalAssistantMessage(BaseModel):
role: Literal["assistant"] = "assistant"
content: str
created_at: datetime
class SendMessageResponse(BaseModel):
session_id: str
message: FinalAssistantMessage
tools_use: list[str] = Field(default_factory=list)
usage: TokenUsage | None
class SessionHistoryResponse(BaseModel):
session_id: str
system_prompt: str
created_at: datetime
updated_at: datetime
messages: list[Message]
class UserUsageResponse(BaseModel):
user_id: str
api_calls: int
prompt_tokens: int
completion_tokens: int
total_tokens: int
updated_at: datetime
class RegisterRequest(BaseModel):
model_config = ConfigDict(extra="forbid")
username: str
password: str
@field_validator("username")
@classmethod
def validate_username(cls, value: str) -> str:
if not value.strip():
raise ValueError("username must not be blank")
return value
@field_validator("password")
@classmethod
def validate_password(cls, value: str) -> str:
if not value.strip():
raise ValueError("password must not be blank")
return value
class RegisterResponse(BaseModel):
user_id: str
created_at: datetime
class LoginRequest(BaseModel):
model_config = ConfigDict(extra="forbid")
username: str
password: str
@field_validator("username")
@classmethod
def validate_username(cls, value: str) -> str:
if not value.strip():
raise ValueError("username must not be blank")
return value
@field_validator("password")
@classmethod
def validate_password(cls, value: str) -> str:
if not value.strip():
raise ValueError("password must not be blank")
return value
class LoginResponse(BaseModel):
user_id: str
api_key: str