116 lines
3.9 KiB
Python
116 lines
3.9 KiB
Python
"""Pydantic request/response models for the API."""
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
# ── Auth ───────────────────────────────────────────────
|
|
|
|
class LoginRequest(BaseModel):
|
|
id: str
|
|
password: str
|
|
|
|
|
|
class TokenResponse(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
|
|
|
|
class UserInfo(BaseModel):
|
|
user_id: str
|
|
|
|
|
|
# ── LLM Config ───────────────────────────────────────
|
|
|
|
class LLMConfig(BaseModel):
|
|
alias: str
|
|
base_url: str
|
|
api_key: str
|
|
model: str
|
|
context_size: int
|
|
|
|
|
|
# ── Translation Session ────────────────────────────────
|
|
|
|
class ProperNoun(BaseModel):
|
|
original: str # 원문 고유명사
|
|
suggested: str # 제안 번역
|
|
final: str = "" # 사용자 최종 결정 (Phase 2)
|
|
|
|
|
|
class Phase1Result(BaseModel):
|
|
translated: str # 초벌 번역 결과
|
|
proper_nouns: list[ProperNoun] # 추출된 고유명사 리스트
|
|
summary: str # 내용 요약
|
|
style: str # 문체 분석 결과
|
|
warnings: list[str] = [] # JSON 복구/폴백 등 품질 관련 알림
|
|
|
|
|
|
class TranslationChunk(BaseModel):
|
|
source_text: str
|
|
translated: str
|
|
|
|
|
|
class PhaseProgress(BaseModel):
|
|
phase: int
|
|
chunk: int
|
|
total_chunks: int
|
|
status: str
|
|
preview: str = ""
|
|
|
|
|
|
class TranslationSession(BaseModel):
|
|
"""Full translation session state."""
|
|
|
|
source_text: str = "" # 원문
|
|
source_language: str = "auto" # 출발어 (auto = 자동판단)
|
|
target_language: str = "한국어" # 도착어
|
|
model_phase1: str = "" # Phase 1 LLM 모델 alias
|
|
model_phase2: str = "" # Phase 2 LLM 모델 alias
|
|
model_phase3: str = "" # Phase 3 LLM 모델 alias
|
|
model_phase4: str = "" # Phase 4 LLM 모델 alias
|
|
phase1_result: Phase1Result | None = None # 초벌 번역 결과
|
|
phase1_chunks: list[TranslationChunk] = [] # 장문 분할 시 원문/초벌 번역 쌍
|
|
phase2_proper_nouns: list[ProperNoun] = [] # Phase 2에서 최종 확정된 고유명사
|
|
phase2_style: str = "" # Phase 2에서 최종 확정된 문체
|
|
phase3_result: str = "" # 재번역 결과
|
|
phase3_chunks: list[str] = [] # 장문 분할 재번역 결과
|
|
phase4_result: str = "" # 마무리 다듬기 결과
|
|
progress: PhaseProgress | None = None # 장기 작업 진행 상태
|
|
|
|
|
|
# ── API Requests ───────────────────────────────────────
|
|
|
|
class CreateSessionRequest(BaseModel):
|
|
source_text: str
|
|
source_language: str = "auto"
|
|
target_language: str = "한국어"
|
|
model_phase1: str = ""
|
|
model_phase2: str = ""
|
|
model_phase3: str = ""
|
|
model_phase4: str = ""
|
|
|
|
|
|
class PhaseUpdateRequest(BaseModel):
|
|
"""Partial update for a specific phase."""
|
|
|
|
source_text: str | None = None
|
|
source_language: str | None = None
|
|
target_language: str | None = None
|
|
model_phase1: str | None = None
|
|
model_phase2: str | None = None
|
|
model_phase3: str | None = None
|
|
model_phase4: str | None = None
|
|
|
|
|
|
class Phase2ConfirmRequest(BaseModel):
|
|
"""User confirms or edits proper nouns and style for Phase 2."""
|
|
|
|
proper_nouns: list[ProperNoun]
|
|
style: str
|
|
|
|
|
|
# ── API Responses ──────────────────────────────────────
|
|
|
|
class SessionResponse(BaseModel):
|
|
session_id: str
|
|
data: TranslationSession
|