Md-Asif's picture
Rename items.py to agents/items.py
9494574 verified
Raw
History Blame Contribute Delete
1.72 kB
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}>"
@staticmethod
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)
@classmethod
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"]],
)