64 lines
1.3 KiB
Python
64 lines
1.3 KiB
Python
"""saju-lab Pydantic 모델."""
|
|
from typing import List, Literal, Optional
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
# --- Input ---
|
|
|
|
class SajuInterpretRequest(BaseModel):
|
|
year: int = Field(..., ge=1900, le=2100)
|
|
month: int = Field(..., ge=1, le=12)
|
|
day: int = Field(..., ge=1, le=31)
|
|
hour: Optional[int] = Field(None, ge=0, le=23)
|
|
gender: Literal["male", "female"]
|
|
calendar_type: Literal["solar", "lunar"] = "solar"
|
|
is_leap_month: bool = False
|
|
|
|
|
|
class CompatInterpretRequest(BaseModel):
|
|
person_a: SajuInterpretRequest
|
|
person_b: SajuInterpretRequest
|
|
|
|
|
|
# --- Response ---
|
|
|
|
class SajuInterpretResponse(BaseModel):
|
|
saju: dict
|
|
analysis: dict
|
|
daeun: List[dict]
|
|
interpretation_json: dict
|
|
reading_id: int
|
|
model: str
|
|
tokens_in: int
|
|
tokens_out: int
|
|
cost_usd: float
|
|
latency_ms: int
|
|
reroll_count: int = 0
|
|
|
|
|
|
class CompatInterpretResponse(BaseModel):
|
|
saju_a: dict
|
|
saju_b: dict
|
|
score: int
|
|
breakdown: dict
|
|
interpretation_json: dict
|
|
reading_id: int
|
|
model: str
|
|
tokens_in: int
|
|
tokens_out: int
|
|
cost_usd: float
|
|
latency_ms: int
|
|
reroll_count: int = 0
|
|
|
|
|
|
# --- CRUD ---
|
|
|
|
class SajuPatchRequest(BaseModel):
|
|
favorite: Optional[bool] = None
|
|
memo: Optional[str] = None
|
|
|
|
|
|
class CompatPatchRequest(BaseModel):
|
|
favorite: Optional[bool] = None
|
|
memo: Optional[str] = None
|