team13 / helper_functions.py
MarceauL's picture
merging
3a19185
raw
history blame
4.54 kB
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