Spaces:
Sleeping
Sleeping
| from pydantic import BaseModel | |
| from datasets import Dataset, DatasetDict, load_dataset | |
| from typing import Optional, Self | |
| PREFIX = "Price is $" | |
| QUESTION = "What does this cost to the nearest dollar?" | |
| class Item(BaseModel): | |
| """ | |
| An Item is a data-point of a Product with a Price | |
| """ | |
| title: str | |
| category: str | |
| price: float | |
| full: Optional[str] = None | |
| weight: Optional[float] = None | |
| summary: Optional[str] = None | |
| prompt: Optional[str] = None | |
| id: Optional[int] = None | |
| def make_prompt(self, text: str): | |
| self.prompt = f"{QUESTION}\n\n{text}\n\n{PREFIX}{round(self.price)}.00" | |
| def test_prompt(self) -> str: | |
| return self.prompt.split(PREFIX)[0] + PREFIX | |
| def __repr__(self) -> str: | |
| return f"<{self.title} = ${self.price}>" | |
| def push_to_hub(dataset_name: str, train: list[Self], val: list[Self], test: list[Self]): | |
| """Push Item lists to HuggingFace Hub""" | |
| DatasetDict( | |
| { | |
| "train": Dataset.from_list([item.model_dump() for item in train]), | |
| "validation": Dataset.from_list([item.model_dump() for item in val]), | |
| "test": Dataset.from_list([item.model_dump() for item in test]), | |
| } | |
| ).push_to_hub(dataset_name) | |
| def from_hub(cls, dataset_name: str) -> tuple[list[Self], list[Self], list[Self]]: | |
| """Load from HuggingFace Hub and reconstruct Items""" | |
| ds = load_dataset(dataset_name) | |
| return ( | |
| [cls.model_validate(row) for row in ds["train"]], | |
| [cls.model_validate(row) for row in ds["validation"]], | |
| [cls.model_validate(row) for row in ds["test"]], | |
| ) | |