Spaces:
Sleeping
Sleeping
| """ | |
| src/api/schemas.py | |
| FastAPI / LangGraphμμ μ¬μ©νλ Pydantic μμ²/μλ΅ μ€ν€λ§ | |
| """ | |
| from pydantic import BaseModel, Field, field_validator | |
| from typing import Optional, Literal | |
| class ERPActionRequest(BaseModel): | |
| """Worker Aκ° LLMμ ν΅ν΄ μΆμΆνλ ERP μμ μμ² μ€ν€λ§""" | |
| # ν¨λ©μ LLMμ΄ μλλΌ worker_a νμ²λ¦¬ μ½λκ° λ΄λΉνλ€. LLMμ μλ³Έ μ«μλ₯Ό | |
| # κ·Έλλ‘ μΆμΆνλ©΄ λλ―λ‘(μ: "6105"), 1~Nμ리λ₯Ό νμ©νλ€. | |
| order_id: str = Field(..., description="SAP μμ μ€λ λ²νΈ (VBELN), μλ³Έ μ«μ κ·Έλλ‘", pattern=r"^\d{1,10}$") | |
| item_no: str = Field(..., description="μ€λ μμ΄ν λ²νΈ (POSNR), μλ³Έ μ«μ κ·Έλλ‘", pattern=r"^\d{1,6}$") | |
| action_type: Literal["CHANGE_QTY", "CHANGE_DATE", "CANCEL_ITEM", "CHANGE_ADDR", "OTHER"] | |
| # μ λ μλ: "set quantity to 264" β 264 | |
| new_quantity: Optional[int] = Field(None, ge=1, description="λ³κ²½ ν μ λ μλ (μμ). μ λ μ§μ μΌ λλ§ μ¬μ©") | |
| # μλ μλ λ³ν: "reduce by 50" β -50, "increase by 30" β +30. | |
| # worker_aκ° νμ¬ μλ(KWMENG)μ μ‘°νν΄ new_quantityλ‘ νμ°νλ€. | |
| quantity_change: Optional[int] = Field(None, description="μλ μλ λ³ν (κ°μ=μμ, μ¦κ°=μμ)") | |
| new_date: Optional[str] = Field(None, description="λ³κ²½ λ©κΈ°μΌ (YYYY-MM-DD)") | |
| new_address: Optional[str] = Field(None, description="λ³κ²½ λ°°μ‘μ§ μ£Όμ (μμ ν μ€νΈ)") | |
| def qty_must_be_positive(cls, v: Optional[int]) -> Optional[int]: | |
| if v is not None and v <= 0: | |
| raise ValueError("μλμ λ°λμ μμμ¬μΌ ν©λλ€.") | |
| return v | |
| class RunRequest(BaseModel): | |
| """POST /api/run μμ² μ€ν€λ§""" | |
| email_text: str = Field(..., description="μ²λ¦¬ν μ΄λ©μΌ μλ¬Έ ν μ€νΈ") | |
| thread_id: Optional[str] = Field(None, description="μ€λ λ ID (λ―Έμ§μ μ μλ μμ±)") | |
| class RunResponse(BaseModel): | |
| """POST /api/run μλ΅ μ€ν€λ§""" | |
| thread_id: str | |
| intent: Optional[str] = None | |
| erp_status: Optional[str] = None | |
| final_response: Optional[str] = None | |
| requires_approval: bool = False | |
| class ApproveResponse(BaseModel): | |
| """GET /api/approve μλ΅ μ€ν€λ§""" | |
| thread_id: str | |
| approved: bool | |
| final_status: str # SUCCESS | REJECTED | FAILED | |
| message: str | |
| errors: list[str] = [] | |