import streamlit as st from PIL import Image from components import GamePlay, Player, Dealer, Deck # PersistDataset ----- import os import csv import gradio as gr from gradio import inputs, outputs import huggingface_hub from huggingface_hub import Repository, hf_hub_download, upload_file from datetime import datetime DATASET_REPO_URL = "https://huggingface.co/datasets/awacke1/Carddata.csv" DATASET_REPO_ID = "awacke1/Carddata.csv" DATA_FILENAME = "Carddata.csv" DATA_FILE = os.path.join("data", DATA_FILENAME) HF_TOKEN = os.environ.get("HF_TOKEN") # overriding/appending to the gradio template SCRIPT = """ """ #with open(os.path.join(gr.networking.STATIC_TEMPLATE_LIB, "frontend", "index.html"), "a") as f: # f.write(SCRIPT) try: hf_hub_download( repo_id=DATASET_REPO_ID, filename=DATA_FILENAME, cache_dir=DATA_DIRNAME, force_filename=DATA_FILENAME ) except: print("file not found") repo = Repository( local_dir="data", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN ) def generate_html() -> str: with open(DATA_FILE) as csvfile: reader = csv.DictReader(csvfile) rows = [] for row in reader: rows.append(row) rows.reverse() if len(rows) == 0: return "no messages yet" else: html = "
" for row in rows: html += "
" html += f"{row['name']}" html += f"{row['message']}" html += "
" html += "
" return html def store_message(name: str, message: str): if name and message: with open(DATA_FILE, "a") as csvfile: writer = csv.DictWriter(csvfile, fieldnames=["name", "message", "time"]) writer.writerow( {"name": name, "message": message, "time": str(datetime.now())} ) commit_url = repo.push_to_hub() return generate_html() iface = gr.Interface( store_message, [ inputs.Textbox(placeholder="Your name"), inputs.Textbox(placeholder="Your message", lines=2), ], "html", css=""" .message {background-color:cornflowerblue;color:white; padding:4px;margin:4px;border-radius:4px; } """, title="Reading/writing to a HuggingFace dataset repo from Spaces", description=f"This is a demo of how to do simple *shared data persistence* in a Gradio Space, backed by a dataset repo.", article=f"The dataset repo is [{DATASET_REPO_URL}]({DATASET_REPO_URL})", ) #iface.launch() # ------- # Game settings number_of_decks = 6 blackjack_multiplier = 1.5 # Initialize player, dealer, deck and game play. Cache these variables @st.cache(allow_output_mutation=True, suppress_st_warning=True) def start_game(): game_deck = Deck(number_of_decks) dealer = Dealer() player = Player() game_play = GamePlay(player, dealer, game_deck, blackjack_multiplier) return game_deck, dealer, player, game_play game_deck, dealer, player, game_play = start_game() st.title('🃏Blackjack Simulator AI♠2️⃣1️⃣') if st.button('New hand?'): game_play.deal_in() player_stats = st.empty() player_images = st.empty() player_hit_option = st.empty() player_double_down_option = st.empty() player_stand_option = st.empty() dealer_stats = st.empty() dealer_images = st.empty() result = st.empty() if 'Hit' in player.possible_actions: if player_hit_option.button('Hit'): player.player_hit(game_deck, game_play) if 'Hit' not in player.possible_actions: player_hit_option.empty() if 'Double Down' in player.possible_actions: if player_double_down_option.button('Double Down'): player.double_down(game_deck, game_play) player_double_down_option.empty() player_hit_option.empty() player_stand_option.empty() if 'Stand' in player.possible_actions: if player_stand_option.button('Stand'): player.stand(game_play) player_hit_option.empty() player_double_down_option.empty() player_stand_option.empty() game_play.update() player_stats.write(player) player_images.image([Image.open(card.image_location) for card in player.cards], width=100) dealer_stats.write(dealer) dealer_images.image([Image.open(card.image_location) for card in dealer.cards], width=100) r=store_message("Aaron Wacker", game_play) result.write(game_play)