Gabriel Vidal-Ayrinhac
new containerized unity+api
7d6d833
import yaml
from dataclasses import dataclass
from typing import List, Dict, Union
from pathlib import Path
from hackathon.utils import util
from dataclasses import asdict
import random
import json
class Deck:
def __init__(self, data_path_char_1:Path, data_path_char_2:Path,
data_path_neutral:Path):
self.cards_1 = self.add_cards_from_path(data_path_char_1, -1)
self.cards_2 = self.add_cards_from_path(data_path_char_2, 1)
self.cards_neutral = self.add_cards_from_path(data_path_neutral, 0)
self.cards_samples = None
def add_cards_from_path(self, data_path_char:Path, side:int):
cards = util.read_yaml(data_path_char)
cards_ = []
for card_dict in cards:
card_dict.update({"side":side})
cards_.append(Card.from_dict(card_dict))
return cards_
def shuffle_all(self):
random.shuffle(self.all_cards)
def sample(self):
n_1 = min(len(self.cards_1), random.randint(5, 10))
self.cards_1 = random.sample(self.cards_1, n_1)
n_2 = min(len(self.cards_2), random.randint(5, 10))
self.cards_2 = random.sample(self.cards_2, n_2)
n_neutral = min(len(self.cards_neutral), random.randint(5, 10))
self.cards_neutral = random.sample(self.cards_neutral, n_neutral)
self.all_cards = self.cards_1 + self.cards_2 + self.cards_neutral
self.shuffle_all()
def to_list(self):
return [asdict(card) for card in self.all_cards]
@dataclass
class Card:
title: str
description: str
source: str
game_context: str
change_personal_context: bool
information_intensity: str
year:Union[None, int] = None
side:Union[None, int] = None
@classmethod
def from_yaml(cls, file_path: str) -> List["Card"]:
"""Reads a YAML file and returns a list of Card instances."""
with open(file_path, "r", encoding="utf-8") as file:
data = yaml.safe_load(file)
# Ensure `data` is a list of dictionaries
if not isinstance(data, list):
raise ValueError("YAML content is not a list of items.")
return [cls(**item) for item in data]
@classmethod
def from_dict(cls, data: Dict) -> "Card":
return cls(**data)
@dataclass
class Environment:
description:str
@dataclass
class Game_history:
conversation: List[str]
sentiments_history: List[dict]
def read_yaml_to_dataclass(file_path: str) -> List[Card]:
# Open and parse the YAML file
with open(file_path, "r") as file:
data = yaml.safe_load(file)
# Convert each dictionary entry into a Card dataclass
return [Card(**item) for item in data]