Spaces:
Running
Running
import os | |
import json | |
from graph_utils import * | |
from random import choice | |
def load_character_data(): | |
current_dir = os.path.dirname(os.path.abspath(__file__)) | |
json_path = os.path.join(current_dir, 'original_setup/trump.character.json') | |
with open(json_path, 'r') as file: | |
return json.load(file) | |
def load_chat_history(game_root): | |
history_path = game_root + '/chat_history.json' | |
try: | |
with open(history_path, 'r') as file: | |
return json.load(file) | |
except FileNotFoundError: | |
return [] | |
def update_chat_history(chat_history, user_message=None, trump_message=None): | |
# If this is a new interaction, create a new interaction number | |
interaction_number = len(chat_history) + 1 | |
# If we're starting a new interaction with a user message | |
if user_message and not trump_message: | |
interaction_key = f"interaction_{interaction_number}" | |
new_interaction = { | |
interaction_key: { | |
"user": {"role": "user", "message": user_message}, | |
"trump": None | |
} | |
} | |
chat_history.append(new_interaction) | |
# If we're adding Trump's response to an existing interaction | |
elif trump_message: | |
# Get the last interaction number (current one) | |
interaction_key = f"interaction_{len(chat_history)}" | |
current_interaction = chat_history[-1][interaction_key] | |
current_interaction["trump"] = {"role": "Trump", "message": trump_message} | |
return chat_history | |
def save_chat_history(history, game_root): | |
history_path = os.path.join(game_root, 'chat_history.json') | |
with open(history_path, 'w') as file: | |
json.dump(history, file, indent=2) | |
def initialize_game(): | |
world_graph = WorldGraph('original_setup/contexts/world_map.edgelist') | |
os.makedirs("games", exist_ok=True) | |
game_number = len(os.listdir('games')) + 1 | |
os.makedirs(f"games/game_{game_number}", exist_ok=True) | |
world_graph.save_graph_as_edgelist(f'games/game_{game_number}/world_graph.edgelist') | |
return game_number | |
def generate_round_context(game_number): | |
"""randomly generates a context and returns all the prompt elements needed""" | |
game_dir = f'games/game_{game_number}/' | |
contexts_dir = 'original_setup/contexts/' | |
#generate idea | |
with open(contexts_dir + 'actions.list', 'r') as file: | |
idea_csq = file.readlines() | |
idea_csq = choice(idea_csq) | |
idea, delta_USA, delta_country, delta_friendliness = idea_csq.split(';') | |
delta_friendliness = delta_friendliness.split()[0] | |
with open(contexts_dir + 'countries.list', 'r') as f_countries: | |
countries = f_countries.readlines() | |
country = choice(countries).split()[0] | |
idea = idea.replace('[country]', country) | |
with open(contexts_dir + 'concerns.list', 'r') as f: | |
concerns = f.readlines() | |
concern = choice(concerns) | |
with open(contexts_dir + '2nd_characters.list', 'r') as f: | |
advisors = f.readlines() | |
advisor = choice(advisors) | |
consequences = { | |
'country': country, | |
'delta_USA': delta_USA, | |
'delta_country': delta_country, | |
'delta_friendliness': delta_friendliness | |
} | |
try: | |
with open(game_dir + 'events.list', 'r') as f: | |
events = f.read() | |
except FileNotFoundError: | |
events = '' | |
return idea, concern, advisor, events, consequences | |
def check_end(trump_response): | |
"""checks if its the end of the sequence returns a tuple (is_ending:bool, idea_is_accepted:bool/Nonetype)""" | |
if "I HAD SUCH A GREAT IDEA LET'S DO IT" in trump_response: | |
return True, True | |
if "I DECIDED IT WAS A BAD IDEA" in trump_response: | |
return True, False | |
return False, None | |
def process_ending(idea_is_accepted, game_number, idea): | |
if idea_is_accepted: | |
with open(f'games/game_{game_number}/events.list', 'a') as f: | |
f.write(idea + '\n') | |
world_graph = WorldGraph(f'games/game_{game_number}/world_graph.edgelist') | |
with open(f'games/game_{game_number}/round_consequences.json', 'r') as f: | |
consequences = json.load(f) | |
country = consequences['country'] | |
delta_USA = int(consequences['delta_USA']) | |
delta_country = int(consequences['delta_country']) | |
delta_friendliness = int(consequences['delta_friendliness']) | |
GDP = world_graph.update_world(country, delta_USA, delta_country, delta_friendliness, game_number) | |
return GDP |