| """FabAgent Tier ๋ฐ์ดํฐ ๊ณ์ฝ | |
| ํ๋ก ํธ์๋(components/)์ ๋ฐฑ์๋(agents/)๊ฐ ๊ณต์ ํ๋ ๋จ์ผ ๊ณ์ฝ๋ฉด | |
| ์ด ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๋ฉด ์์ชฝ ๋ค ์ํฅ๋ฐ์ผ๋ฏ๋ก, ๋ณ๊ฒฝ์ ์์ PR๋ก ๋จผ์ ํฉ์ ์์ | |
| ๋ชจ๋ Tier ๋ฐ์ดํฐ๋ plain dict๋ก ๋ค๋ฃธ - components/๊ฐ HTML f-string์์ | |
| dict ํค๋ก ์ง์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ, TypedDict๋ ํ์ ํํธ/๋ฌธ์ ์ฉ๋ | |
| """ | |
| from typing import Optional, TypedDict | |
| # Tier 1 ์ด์ ํ์ง | |
| class Feature(TypedDict): | |
| name: str | |
| value: float | |
| class LotRef(TypedDict): | |
| id: str | |
| wafers: int | |
| class Tier1(TypedDict): | |
| score: float # ์ด์ ์ ์ (0~1) | |
| features: list[Feature] # ๊ธฐ์ฌ ํผ์ฒ Top-N (value ๋ด๋ฆผ์ฐจ์) | |
| lot: LotRef | |
| # Tier 2 ์์ธ ๋ถ์ | |
| class Cause(TypedDict): | |
| name: str | |
| pct: int # ์ถ์ ๊ธฐ์ฌ๋ (%) | |
| evidence: str | |
| citations: list[str] # RAG ๊ทผ๊ฑฐ ๋ฌธ์ ID | |
| class Tier2(TypedDict): | |
| causes: list[Cause] | |
| # Tier 3 ๊ณต์ ๊ฐ ์ํฅ ํ๊ฐ | |
| class Dependency(TypedDict): | |
| stage: str | |
| delta: str | |
| tag: str | |
| kind: str # "current" | "impacted" | "minor" | |
| class ImpactLot(TypedDict): | |
| label: str | |
| lots: int | |
| wafers: int | |
| class Tier3(TypedDict): | |
| yield_loss: float # ์์ ์์จ ์์ค (%p) | |
| dependencies: list[Dependency] | |
| impact_lots: list[ImpactLot] | |
| # Tier 4 ๋์ ๊ถ๊ณ | |
| class Action(TypedDict): | |
| text: str | |
| meta: Optional[str] | |
| class Reference(TypedDict): | |
| id: str | |
| desc: str | |
| class Tier4(TypedDict): | |
| immediate: list[Action] | |
| longterm: list[Action] | |
| refs: list[Reference] | |
| # ์ ์ฒด | |
| class TierData(TypedDict): | |
| tier1: Tier1 | |
| tier2: Tier2 | |
| tier3: Tier3 | |
| tier4: Tier4 | |