HelloWorld0204's picture
Upload 16 files
e08551d verified
Raw
History Blame Contribute Delete
1.33 kB
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Literal
import numpy as np
SlotName = Literal["top", "bottom", "shoes", "accessory", "unknown"]
@dataclass(slots=True)
class WeatherContext:
season: str = "all-season"
temperature_c: float | None = None
is_rainy: bool | None = None
@dataclass(slots=True)
class RecommendationContext:
occasion: str = "casual"
weather: WeatherContext = field(default_factory=WeatherContext)
region: str = "global"
user_profile: dict[str, Any] = field(default_factory=dict)
@dataclass(slots=True)
class EncodedWardrobeItem:
item: dict[str, Any]
vector: np.ndarray
slot: SlotName
metadata_text: str
@dataclass(slots=True)
class OutfitCandidate:
top: EncodedWardrobeItem
bottom: EncodedWardrobeItem
shoes: EncodedWardrobeItem | None = None
accessory: EncodedWardrobeItem | None = None
score: float = 0.0
breakdown: dict[str, float] = field(default_factory=dict)
reason: str = ""
tip: str = ""
def slot_items(self) -> list[EncodedWardrobeItem]:
return [
slot_item
for slot_item in [self.top, self.bottom, self.shoes, self.accessory]
if slot_item is not None
]