diff --git a/__pycache__/generator.cpython-36.pyc b/__pycache__/generator.cpython-36.pyc new file mode 100644 index 0000000..3339740 Binary files /dev/null and b/__pycache__/generator.cpython-36.pyc differ diff --git a/__pycache__/utils.cpython-36.pyc b/__pycache__/utils.cpython-36.pyc new file mode 100644 index 0000000..ef1fd49 Binary files /dev/null and b/__pycache__/utils.cpython-36.pyc differ diff --git a/generator.py b/generator.py index 1a15abe..41e3c45 100644 --- a/generator.py +++ b/generator.py @@ -8,6 +8,8 @@ import gpt2.src.sample as sample import gpt2.src.encoder as encoder from utils import * +pos_action_starts = ["You attack", "You tell", "You use", "You go"] + class StoryGenerator(): @@ -53,7 +55,7 @@ class StoryGenerator(): return block - def generate_action_options(self, prompt, action_starts): + def generate_action_options(self, prompt, action_starts=pos_action_starts): possible_actions = [] for phrase in action_starts: diff --git a/gpt2/src/__pycache__/__init__.cpython-36.pyc b/gpt2/src/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..2a9af0a Binary files /dev/null and b/gpt2/src/__pycache__/__init__.cpython-36.pyc differ diff --git a/gpt2/src/__pycache__/encoder.cpython-36.pyc b/gpt2/src/__pycache__/encoder.cpython-36.pyc new file mode 100644 index 0000000..54dee2d Binary files /dev/null and b/gpt2/src/__pycache__/encoder.cpython-36.pyc differ diff --git a/gpt2/src/__pycache__/model.cpython-36.pyc b/gpt2/src/__pycache__/model.cpython-36.pyc new file mode 100644 index 0000000..800652b Binary files /dev/null and b/gpt2/src/__pycache__/model.cpython-36.pyc differ diff --git a/gpt2/src/__pycache__/sample.cpython-36.pyc b/gpt2/src/__pycache__/sample.cpython-36.pyc new file mode 100644 index 0000000..7eed82a Binary files /dev/null and b/gpt2/src/__pycache__/sample.cpython-36.pyc differ diff --git a/main.py b/main.py index 71e7f04..4ce749f 100644 --- a/main.py +++ b/main.py @@ -17,7 +17,9 @@ import datetime from generator import StoryGenerator import tensorflow as tf from flask import g +import pdb +import json from flask import Flask, render_template, request app = Flask(__name__) @@ -34,16 +36,19 @@ def root(): @app.route('/generate', methods=['POST']) def story_request(): - print("****Beginning Generation****") - is_story_block = request.form["story_block"] # is it a full story block or just an action? + print("****Generating Story****") prompt = request.form["prompt"] # given prompt + gen_actions = request.form["actions"] # given prompt + + print("\n Given prompt is: \n",prompt,"\n") generator = get_generator() - - if is_story_block: - response = generator.generate_story_block(prompt) + + if gen_actions == "true": + response = generator.generate_action_options(prompt) + response = json.dumps(response) else: - response = generator.generate_action_block(prompt) + response = generator.generate_story_block(prompt) print("\nGenerated response is: \n", response) print("") diff --git a/static/script.js b/static/script.js index 42c6100..9b78e34 100644 --- a/static/script.js +++ b/static/script.js @@ -1,75 +1,191 @@ +initial_prompt = "You enter a dungeon with your trusty sword and shield. You are searching for the evil necromancer who killed your family. You believe he is at the lowest level of the dungeon. You know you will encounter undead zombies and skeletons. You enter the first door and see" + +start_text = "Adventurer@AIDungeon:~$ ./EnterDungeon \n
" + + +var acceptInput=false +var inputStr = "" +var blinkCounter = 0 + +var StoryTracker = { + firstStory: null, + lastStory: null, + lastAction: null, + actions: null, + startPrompt: initial_prompt, + + getFirstStory:function(){ + console.log("Requesting first story") + Typer.appendToText(initial_prompt) + StoryTracker.requestStory(initial_prompt) + + }, + + addNextStory:function(story){ + StoryTracker.lastStory = story + if (StoryTracker.firstStory == null){ + StoryTracker.firstStory = StoryTracker.startPrompt + story + } + + StoryTracker.requestActions(StoryTracker.firstStory + StoryTracker.lastStory) + Typer.appendToText(story) + }, + + addNextActions:function(actions){ + var actions = JSON.parse(actions) + StoryTracker.actions = actions + Typer.appendToText("\n\nOptions:") + Typer.appendToText("\n0) " + actions[0]) + Typer.appendToText("\n1) " + actions[1]) + Typer.appendToText("\n2) " + actions[2]) + Typer.appendToText("\n3) " + actions[3]) + Typer.appendToText("\nWhich action do you choose? ") + + acceptInput = true + }, + + requestStory:function(prompt){ + $.post("/generate", {actions: false, prompt}, + StoryTracker.addNextStory) + }, + + requestActions:function(prompt){ + $.post("/generate", {actions: true, prompt}, + StoryTracker.addNextActions) + }, + + processInput:function(){ + var choice_int = parseInt(inputStr, 10) + + if(choice_int >= 0 && choice_int <= 3){ + + console.log("choice_int is %d", choice_int) + StoryTracker.lastAction = StoryTracker.actions[choice_int] + StoryTracker.requestStory(StoryTracker.firstStory + StoryTracker.lastStory + StoryTracker.lastAction) + + } + else{ + + Typer.appendToText("Invalid choice. Must be a number from 0 to 3. \n") + Typer.appendToText("\nWhich action do you choose? ") + acceptInput=true + } + + + inputStr = "" + } +} + var Typer={ text: null, accessCountimer:null, index:0, speed:2, - init: function(){ - accessCountimer=setInterval(function(){Typer.blinkCursor();},500); + startBlinker: function(){ + accessCountimer=setInterval(function(){Typer.blinkCursor()},500) }, content:function(){ - return $("#console").html(); + return $("#console").html() + }, + + appendToText:function(str){ + str = str.replace(".", "." + "") + Typer.text = Typer.text + str; }, addText:function(){ - var cont=Typer.content(); - if(cont.substring(cont.length-1,cont.length)=="|") - $("#console").html($("#console").html().substring(0,cont.length-1)); + + if (Typer.index <= Typer.text.length) { + var cont=Typer.content() + if(cont.substring(cont.length-1,cont.length)=="|") + $("#console").html($("#console").html().substring(0,cont.length-1)) - Typer.index+=Typer.speed; - var text=Typer.text.substring(0,Typer.index) - var rtn= new RegExp("\n", "g"); + if (Typer.text.substring(Typer.index, Typer.index + Typer.speed).includes(".")){ + Typer.index += 1 + } + else{ + Typer.index+=Typer.speed + } + var text=Typer.text.substring(0,Typer.index) + var rtn= new RegExp("\n", "g") - $("#console").html(text.replace(rtn,"
")); - window.scrollBy(0,50); + $("#console").html(text.replace(rtn,"
")) + window.scrollBy(0,50) + } }, blinkCursor:function(){ - var cont=this.content(); + + if(blinkCounter > 10){ + var cont=this.content() - if(cont.substring(cont.length-1,cont.length)=="|") - $("#console").html($("#console").html().substring(0,cont.length-1)); + if(cont.substring(cont.length-1,cont.length)=="|") + $("#console").html($("#console").html().substring(0,cont.length-1)) - else - $("#console").append("|"); + else + $("#console").append("|") + } + else{ + blinkCounter += 1 + } } } -// request_story("Hello") -function requestStory(prompt){ - $.post("/generate", { story_block: true, prompt}, - startTyping); +function writeAppend(str){ + $("#console").append(str) + } -function startTyping(story){ - Typer.text=story - addTextTimer = setInterval("typeWords();", 40); +function startTyping(){ + addTextTimer = setInterval("typeWords()", 35) } function typeWords() { - Typer.addText(); - - if (Typer.index > Typer.text.length) { - clearInterval(addTextTimer); - - var choice = prompt("What's your choice?"); + Typer.addText() +} + +document.onkeypress = function(evt) { + + if(acceptInput){ + evt = evt || window.event + var charCode = evt.keyCode || evt.which + + if(charCode == 13){ + acceptInput = false + Typer.appendToText("\n\n") + StoryTracker.processInput(inputStr) + } + else{ - requestStory(prompt); - // Here we probably want to call the request story function with the choice they made + var charStr = String.fromCharCode(charCode) + Typer.appendToText(charStr) + inputStr = inputStr + charStr + } - } + } } function start(){ - Typer.speed=2; + + Typer.speed=1 + Typer.text = "" + Typer.appendToText(start_text) + + StoryTracker.getFirstStory() - Typer.init(); - startTyping("Adventurer@DungeonDream:~$ Hello Adventurer and welcome to my dungeon!"); + startTyping() + Typer.startBlinker() } -addTextTimer = null; -start(); + +$(document).ready(function() { + start() +}) + + +