Munashedov

Untitled

Dec 11th, 2019
523
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.45 KB | None | 0 0
  1. from story.story_manager import *
  2. from generator.gpt2.gpt2_generator import *
  3. from story.utils import *
  4. import time, sys, os
  5. os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
  6.  
  7. def flush_input():
  8. import msvcrt
  9. while msvcrt.kbhit():
  10. msvcrt.getch()
  11.  
  12. def select_game():
  13. with open(YAML_FILE, 'r') as stream:
  14. data = yaml.safe_load(stream)
  15.  
  16. print("Pick a setting.")
  17. settings = data["settings"].keys()
  18. for i, setting in enumerate(settings):
  19. print_str = str(i) + ") " + setting
  20. if setting == "fantasy":
  21. print_str += " (recommended)"
  22.  
  23. console_print(print_str)
  24. console_print(str(len(settings)) + ") custom")
  25. choice = get_num_options(len(settings)+1)
  26.  
  27. if choice == len(settings):
  28.  
  29. context = ""
  30. console_print("\nEnter a prompt that describes who you are and the first couple sentences of where you start "
  31. "out ex:\n 'You are a knight in the kingdom of Larion. You are hunting the evil dragon who has been " +
  32. "terrorizing the kingdom. You enter the forest searching for the dragon and see' ")
  33. prompt = input("Starting Prompt: ")
  34. return context, prompt
  35.  
  36. setting_key = list(settings)[choice]
  37.  
  38. print("\nPick a character")
  39. characters = data["settings"][setting_key]["characters"]
  40. for i, character in enumerate(characters):
  41. console_print(str(i) + ") " + character)
  42. character_key = list(characters)[get_num_options(len(characters))]
  43.  
  44. name = input("\nWhat is your name? ")
  45. setting_description = data["settings"][setting_key]["description"]
  46. character = data["settings"][setting_key]["characters"][character_key]
  47.  
  48. context = "You are " + name + ", a " + character_key + " " + setting_description + \
  49. "You have a " + character["item1"] + " and a " + character["item2"] + ". "
  50. prompt_num = np.random.randint(0, len(character["prompts"]))
  51. prompt = character["prompts"][prompt_num]
  52.  
  53. return context, prompt
  54.  
  55.  
  56. def instructions():
  57. text = "\nAI Dungeon 2 Instructions:"
  58. text += '\n Enter actions starting with a verb ex. "go to the tavern" or "attack the orc."'
  59. text += '\n To speak enter \'say "(thing you want to say)"\' or just "(thing you want to say)" '
  60. text += '\n\nThe following commands can be entered for any action: '
  61. text += '\n "revert" Reverts the last action allowing you to pick a different action.'
  62. text += '\n "quit" Quits the game and saves'
  63. text += '\n "restart" Starts a new game and saves your current one'
  64. text += '\n "save" Makes a new save of your game and gives you the save ID'
  65. text += '\n "load" Asks for a save ID and loads the game if the ID is valid'
  66. text += '\n "print" Prints a transcript of your adventure (without extra newline formatting)'
  67. text += '\n "settemp" Changes the AI temperature, default is now 0.15, previously 0.4. Going lower will make AI less random.'
  68. text += '\n "help" Prints these instructions again'
  69. return text
  70.  
  71. def play_aidungeon_2():
  72.  
  73. console_print("AI Dungeon 2 will save and use your actions and game to continually improve AI Dungeon."
  74. + " If you would like to disable this enter 'nosaving' for any action. This will also turn off the "
  75. + "ability to save games.")
  76.  
  77. upload_story = True
  78.  
  79. print("\nInitializing AI Dungeon! (This might take a few minutes)\n")
  80. generator = GPT2Generator()
  81. story_manager = UnconstrainedStoryManager(generator)
  82. print("\n")
  83.  
  84. #with open('opening.txt', 'r') as file:
  85. # starter = file.read()
  86. #print(starter)
  87.  
  88. while True:
  89. if story_manager.story != None:
  90. del story_manager.story
  91.  
  92. print("\n\n")
  93. context, prompt = select_game()
  94. console_print(instructions())
  95. print("\nGenerating story...")
  96.  
  97. story_manager.start_new_story(prompt, context=context, upload_story=upload_story)
  98.  
  99. print("\n")
  100. console_print(str(story_manager.story))
  101. while True:
  102. flush_input()
  103. action = input("> ")
  104. if action == "restart":
  105. rating = input("Please rate the story quality from 1-10: ")
  106. rating_float = float(rating)
  107. story_manager.story.rating = rating_float
  108. break
  109.  
  110. elif action == "quit":
  111. rating = input("Please rate the story quality from 1-10: ")
  112. rating_float = float(rating)
  113. story_manager.story.rating = rating_float
  114. exit()
  115.  
  116. elif action == "nosaving":
  117. upload_story = False
  118. story_manager.story.upload_story = False
  119. console_print("Saving turned off.")
  120.  
  121. elif action == "help":
  122. console_print(instructions())
  123.  
  124. elif action == "save":
  125. if upload_story:
  126. id = story_manager.story.save_to_storage()
  127. console_print("Game saved.")
  128. console_print("To load the game, type 'load' and enter the following ID: " + id)
  129. else:
  130. console_print("Saving has been turned off. Cannot save.")
  131.  
  132. elif action =="load":
  133. load_ID = input("What is the ID of the saved game?")
  134. result = story_manager.story.load_from_storage(load_ID)
  135. console_print("\nLoading Game...\n")
  136. console_print(result)
  137.  
  138. elif len(action.split(" ")) == 2 and action.split(" ")[0] == "load":
  139. load_ID = action.split(" ")[1]
  140. result = story_manager.story.load_from_storage(load_ID)
  141. console_print("\nLoading Game...\n")
  142. console_print(result)
  143.  
  144. elif action == "print":
  145. print("\nPRINTING\n")
  146. if line_break == "n":
  147. print(str(story_manager.story))
  148. elif line_break == "y":
  149. console_print(str(story_manager.story))
  150. elif line_break.isdigit():
  151. console_print(str(story_manager.story), int(line_break))
  152.  
  153. elif action == "settemp":
  154. temp = float(input("Set a new temperature>"))
  155. if type(temp)==int or float:
  156. story_manager.generator = GPT2Generator(temperature=temp)
  157. else:
  158. print("\nEnter a number, please")
  159. print(str(story_manager.story))
  160.  
  161. elif action == "revert":
  162.  
  163. if len(story_manager.story.actions) is 0:
  164. console_print("You can't go back any farther. ")
  165. continue
  166.  
  167. story_manager.story.actions = story_manager.story.actions[:-1]
  168. story_manager.story.results = story_manager.story.results[:-1]
  169. console_print("Last action reverted. ")
  170. if len(story_manager.story.results) > 0:
  171. console_print(story_manager.story.results[-1])
  172. else:
  173. console_print(story_manager.story.story_start)
  174. continue
  175.  
  176. else:
  177. if action == "":
  178. action = ""
  179. result = story_manager.act(action)
  180. console_print(result)
  181.  
  182. elif action[0] == '"':
  183. action = "You say " + action
  184.  
  185. else:
  186. action = action.strip()
  187. action = action[0].lower() + action[1:]
  188.  
  189. if "You" not in action[:6] and "I" not in action[:6]:
  190. action = "You " + action
  191.  
  192. if action[-1] not in [".", "?", "!"]:
  193. action = action + "."
  194.  
  195. action = first_to_second_person(action)
  196.  
  197. action = "\n> " + action + "\n"
  198.  
  199. result = "\n" + story_manager.act(action)
  200. if len(story_manager.story.results) >= 2:
  201. similarity = get_similarity(story_manager.story.results[-1], story_manager.story.results[-2])
  202. if similarity > 0.9:
  203. story_manager.story.actions = story_manager.story.actions[:-1]
  204. story_manager.story.results = story_manager.story.results[:-1]
  205. console_print("Woops that action caused the model to start looping. Try a different action to prevent that.")
  206. continue
  207.  
  208. if player_won(result):
  209. console_print(result + "\n CONGRATS YOU WIN")
  210. break
  211. elif player_died(result):
  212. console_print(result)
  213. console_print("YOU DIED. GAME OVER")
  214. console_print("\nOptions:")
  215. console_print('0) Start a new game')
  216. console_print('1) "I\'m not dead yet!" (If you didn\'t actually die) ')
  217. console_print('Which do you choose? ')
  218. choice = get_num_options(2)
  219. if choice == 0:
  220. break
  221. else:
  222. console_print("Sorry about that...where were we?")
  223. console_print(result)
  224.  
  225. else:
  226. console_print(result)
  227.  
  228.  
  229. if __name__ == '__main__':
  230. play_aidungeon_2()
Add Comment
Please, Sign In to add comment