From 61d0cd77cc06c9147a836b5a596e9d649d52072f Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 10 Sep 2019 12:35:11 -0600 Subject: [PATCH 1/5] refactoring significantly --- README.md | 2 +- __pycache__/generator.cpython-36.pyc | Bin 0 -> 3857 bytes __pycache__/utils.cpython-36.pyc | Bin 2066 -> 2066 bytes cortex.sh => cortex/cortex.sh | 0 cortex.yaml => cortex/cortex.yaml | 0 cortex/encoder.py | 129 ++++++++++++++++++ generator.py | 28 +--- gpt2/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 132 bytes .../pytorch_generator.py | 0 gpt2/src/__pycache__/encoder.cpython-36.pyc | Bin 4974 -> 4974 bytes gpt2/src/__pycache__/model.cpython-36.pyc | Bin 0 -> 6746 bytes gpt2/src/__pycache__/sample.cpython-36.pyc | Bin 0 -> 2637 bytes main.py | 96 ++----------- generate.sh => other/generate.sh | 0 other/generate_cache.py | 51 +++++++ .../story_prompts.yaml | 0 static/favicon.ico | Bin 0 -> 15406 bytes templates/index.html | 3 +- 18 files changed, 201 insertions(+), 108 deletions(-) create mode 100644 __pycache__/generator.cpython-36.pyc rename cortex.sh => cortex/cortex.sh (100%) rename cortex.yaml => cortex/cortex.yaml (100%) create mode 100644 cortex/encoder.py create mode 100644 gpt2/__pycache__/__init__.cpython-36.pyc rename pytorch_version.py => gpt2/pytorch_generator.py (100%) create mode 100644 gpt2/src/__pycache__/model.cpython-36.pyc create mode 100644 gpt2/src/__pycache__/sample.cpython-36.pyc rename generate.sh => other/generate.sh (100%) create mode 100644 other/generate_cache.py rename story_prompts.yaml => other/story_prompts.yaml (100%) create mode 100644 static/favicon.ico diff --git a/README.md b/README.md index c155884..ad1c8b9 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# Keys \ No newline at end of file +#AIDungeon Code \ No newline at end of file diff --git a/__pycache__/generator.cpython-36.pyc b/__pycache__/generator.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0f7f3b5a5e88fc035f4aaf147c606cf792120a4 GIT binary patch literal 3857 zcmai1+mGB<89&GO@yyQ7ZuZhm+EVC+PD*z-i3A9RG=ZQ{0gK93YOxe7XY83Bug7+d z&yZ&1d72=~Lsap`1Mi6cgGb;GIIk5#k@^?(iQjiTv)OK_>XAQxK0cT4^7}4xV{Og< z+kYP2&wGr0&dyyH_}jRvzkmN4XdqFR@Vmo$XcVq<{_gL)3ttTvQEsS6@_T%;w7F>!u@fx06 z$#&d5HN;<%OAChm`7!ISKZAtqsLxfa6iGZD$U@+SU!D2CEvBzUQbvQ*nMb@#vTWuO zH?5MHL(Hfc(DKz~g1L>m`VmONNY%iI*Ga%991257h+#D%26o~MxfYQJ?ovcA?n0=Z z>K;Rm$M=#v5fQj&zrcq7{ntO~`r^H3Z{uxXgV5E%y@vazxT}AF#B6TIeD1`?+^u=d zLMC}?)b4_KQ(CFLU~^A85*ANewHuoYW5GY$nYU^$^<_Kl)U5?yaLzu$ULUaEu#cHs zOS@zOlaP>uFAzytSrNs`EaL~N zRpAgRqCuhzIaKX31A9_rB!E56<&Ep24K0XQ)q|6e0 z&`%6LoI>hEImJ|#Q>kp61G((u2!g4NERsnj!@)^1I4vQtRIb24A(DQF&d7#>P$PUg zzb%tVNl=@L1RE7)cq+b4UkO~w*M zdkJ@iw8%y{@V+{7i_S!Y_fkdD+WPqIC?Gf} zQ%rO5Cb$NeHXt}kl!?$%PMlEa^eu5!FDrrjQYsVpQx*kWqZJq5r{yHP@>XKKi?@ov z#I!r#;60=Fq9a$c&m2jXB!zWudld|spWHY%B(IUR@HCodZNL%ysBenfn5VV}QyqEZ zY@Ck}EXW8HENc`2k3*5@NW^4PMf{jn*biX2)5h`y=SG9Al}ur?QcofUD>5nrG(GMa zv)8}I9p_gKNE^Bcnv}h@R#YlRY;JyXSQ~fQ{kP{IZvLtNAE9I0Y zBC3#7nt_Yf*gdnxa-*W8{VFnG<6cCt&o^O|t}%P->x}Z%#bJg zxV8Pi0D~?9{n(txCgKbUbiqFR_Z)rO+|oUUHFqRZDXO_EEorCd;ZW)AWjEo~=r3d| z^=t2iZi1z4?ANK$`%xD$Z&81du9HvEL$I{B*hiaFc8`v0$)w|_u|Gj8g>PPBa^aK6EXB8oyhcP9^Y0M%I*~U(lwAsH3oQ8< zrJu^L_%0D@E=3zZK_dTTB%D)-2{W@-byd_Ae*?f}>B9{yYCqVGzV`c}?rS9&_@ zw2nqM^!53BGk59Y7omeX@1V{P$D_bL!JmoZoMDy)xeHmvIuR;+K~MLV=iDGZq;EeY za+3(zO1ae80w#S=c|$atl#+urYS++Cgd-6lscVl=1_=D+|D14`>q?ETwE5#hiM;XB zMc+_E+xVuy4i&+VnP}7~*&AK5KP5s#e2j5QXA?A{Vc6ekKuOaBJD*O<#~P7=k6K(6 zVwe?=G|q!AHTnCM80 zQ#sBmaT&b$H4(ywMvN9&{E}XuE3LVvf4SM@<6GpOied`YURQk5nSNCLJ7)Ke_o}zy G@&5r)$hlPj literal 0 HcmV?d00001 diff --git a/__pycache__/utils.cpython-36.pyc b/__pycache__/utils.cpython-36.pyc index a29c2e3e51e3e8c5a80e79e2536c2aa28a761e41..a0806d47c4274d7b6e82d2da9a1df3bacb36c0c6 100644 GIT binary patch delta 32 ncmbOvFiC*Jn3tD}BfT(oBgacdPDf9d(!BK4{JhP-7$w*MkgN%_ delta 32 ocmbOvFiC*Jn3tF9{ih8v8#!Jwa=Q5H2B#L4r50`e#VElB0JNlJ*s63Vd2p)q77+?f49Dul(1xTbY1T$zd`mJOr0tq9CUxxY_`MIh3d6~)C z<%u~Z`FREg`stY^`i`D1rFrS8`FZ;31tmuM@$s2?nI-Y@dIgoYIBatBQ%ZAE?LbBq H12F>tziA%U literal 0 HcmV?d00001 diff --git a/pytorch_version.py b/gpt2/pytorch_generator.py similarity index 100% rename from pytorch_version.py rename to gpt2/pytorch_generator.py diff --git a/gpt2/src/__pycache__/encoder.cpython-36.pyc b/gpt2/src/__pycache__/encoder.cpython-36.pyc index 87795a632ebf8d37c798d604669c473b3ca35443..cf5999a3e28eeaa5e8848e09dfad63d84038fbe3 100644 GIT binary patch delta 50 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 NzVBC-9KYn3{vQRBzTf}= literal 0 HcmV?d00001 diff --git a/gpt2/src/__pycache__/sample.cpython-36.pyc b/gpt2/src/__pycache__/sample.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c9ca06d6df69ed7b716b72aa430228d57012150 GIT binary patch literal 2637 zcmaJ@O>ZQ{8Lq1Sn4XWFHI5lN)ATgMIZ~*YEPBNeOx_161Q@5fVp@7Ar( z5C1;={J$N>{=;rOF~;wpnYYnNCV9bjxc`cS;2_)yrI5iH+leIiZwOlSZ6ssaIukpw z;tM-#N;RDi-|D5JCF zoM9Bx=rn+a)|TdwGeq+bNhS@yK{J0xM{-EY0w=f-pNSK8!fQGY`$EVF)L<`IXD0%q zaKURaA&v<9`9Um$3nAk*Sh>`da>pl^q!6P>+M}5oVKT_R6YpOBgy(AZue9Za-E*QW zU1Y0SHgT;|9p+ER#zlwwN-Ni{N@cQQJW)C%fq{#kfM=Hj9n zjjj2f{djM4znZGeay*1=;5Zxr?WzB%#K`~ zc{31YW_sutU&9;nn6L8VyPlRc8aD11)i5v2gN=se+P9tyo%b!-ykLj`-_o}+_Fc+# z|7xsPFmlQLBA@Qc{J|P#28|uR{Cs6s8=tR^V!B|b&r$dSD2)ZAP_LqU5zXsL15J!B z99E@tk^09xFW^saBRRD(I?!H*U+^SvdGDr~5lJK(~JaxRTr*VtTJ z_-vv|*V)bOa6dESW93@VZq-xkx>ikRO6PX2l}^Cr&)UL(B0@%xDDyvbwUBI*=sPva zYSK1;wMgGn{!d;G{7Pb8zgn@B-b{*-sKu!`3FU2HB7qFg+FuG#0~ww2ufE}IfifU& zpZZL$e1URXXW(g3>757X;a=#=H#tdUBHL%|qz(SCZr4f8>z3@Svupkrh_?<$0d_<- zK4|$8>t2XcPAdyGg1ya1vJqBCf$Yg!vVYO~EI8@l?bh9G_96R-eF}?^NUK}No7*!r z9Pb?s)YE)ui=zQ*WKiu5Zg_T(mvXRl=%2jnhvYPRDAd=rzk>-Xnbi!YlN$u;KRgNQ zK*I2AClCr?&p`lZ5DtW((>JQ4gOHG*M%u}cj>U1@Is(Q4tI~KY4P9%0mg{_qiv84u zv)ou0X*D;>Czxx^v@)u+NVq#NM*kMwGWlGxq?t5!(X^7PXcD#a@Z-lHWFI~Hc>56m zBYT2E+;wfEY-aZJnQ|S{(u~vCi*>P2IHT`E{7$==X4Txz=C(=lKax)FRsT{WE;Lrn z1|VG_ff(?FuL;4A|Ii>tW>71t9I9WyfOy>PXUNa@{nrpp=}^;s0T08E+@}j+aPUkF z+RYyFKK6+PJpFsb!3K4>KoVadrLi6&@dAp6j39wos1?JjQEs<0at(U_T@f*8~Wc z{|DlyiI1FaW5Ff1%JzyXw;mW=cRDZZxU8n*yl~ODwD;a}F>-g9Th}shusT)GJ z(dvnd8?~-i0xy=4G|O~anwEx5I{g`3dYw8#lAF=pt>n?0SX%5#c-cE$W`pulo1|#uih+<_ji&< zrTk=nT&T3ANtmX854Spn%cls=*b;b-tJ1i3QQ=m7l568ud}(Ck60>n$S`c^h;Ut^s zYUaW+pDMbeC}6%z6W4!eP^2X2k=B)7-VuA_qHrDBpP6Ar#db)h;8uj3?qgM&N^esY z>H*1m1zp-()?lH^k=@rX5rOJl|Bkxr=(zq8v95}f&efdo7L8t|j{KNL4Z8=7XCmxf z{1') def rootseed(seed): if seed == "": @@ -142,6 +127,7 @@ def rootseed(seed): else: seed = int(seed) data = {'seed': seed} + session["seed"] = seed return render_template('index.html', data=data) @app.route('/index.html') @@ -192,15 +178,17 @@ def story_request(): prompt_num = int(request.form["prompt_num"]) gen_actions = request.form["actions"] + print("Session Seed is ", session["seed"]) + if int(seed) < 0 or int(seed) > 100: - print("Invalid seed: " + seed) + #print("Invalid seed: " + seed) abort(404) if gen_actions == "true": #prompt = request.form["prompt"] choices = json.loads(request.form["choices"]) - print("Getting response for seed ", seed, " prompt_num ", prompt_num, " and choices ", choices) + #print("Getting response for seed ", seed, " prompt_num ", prompt_num, " and choices ", choices) action_results = retrieve_from_cache(seed, prompt_num, choices, "choices") @@ -209,13 +197,13 @@ def story_request(): else: last_action_result = request.form["last_action_result"] prompt = continuing_prompts[prompt_num] + last_action_result - print("\n\nAction prompt is \n ", prompt) + #print("\n\nAction prompt is \n ", prompt) action_results = [generate_action_result(prompt, phrase, local=RUN_LOCAL) for phrase in phrases] response = json.dumps(action_results) cache_file(seed, prompt_num, choices, response, "choices") else: - print("Getting response for seed ", seed, " prompt_num ", prompt_num) + #print("Getting response for seed ", seed, " prompt_num ", prompt_num) result = retrieve_from_cache(seed, prompt_num, [], "story") if result is not None: @@ -225,68 +213,10 @@ def story_request(): response = generate_story_block(prompt, local=RUN_LOCAL) cache_file(seed, prompt_num, [], response, "story") - print("\nGenerated response is: \n", response) - print("") + #print("\nGenerated response is: \n", response) + #print("") return response - - -def generate_cache(): - - start_seed = int(sys.argv[1]) - end_seed = int(sys.argv[2]) - - # Generate story sections - prompt_num = 0 - action_queue = [] - prompt = prompts[prompt_num] - for seed in range(start_seed,end_seed): - result = retrieve_from_cache(seed, prompt_num, [], "story") - if result is not None: - response = result - else: - prompt = prompts[prompt_num] - #print("\n Story prompt is ", prompt) - response = generate_story_block(prompt) - #print("\n Story response is ", response) - cache_file(seed, prompt_num, [], response, "story") - - action_queue.append([seed,0,[],response]) - - while(True): - - next_gen = action_queue.pop(0) - seed = next_gen[0] - prompt_num = next_gen[1] - choices = next_gen[2] - last_action_result = next_gen[3] - - action_results = retrieve_from_cache(seed, prompt_num, choices, "choices") - - if action_results is not None: - response = action_results - - else: - if len(choices) is 0: - prompt = prompts[prompt_num] + last_action_result - else: - prompt = continuing_prompts[prompt_num] + last_action_result - #print("\n\n Action prompt is \n ", prompt) - action_results = [generate_action_result(prompt, phrase) for phrase in phrases] - response = json.dumps(action_results) - - #print("\n\n Action - cache_file(seed, prompt_num, choices, response, "choices") - - un_jsoned = json.loads(response) - for j in range(4): - new_choices = choices[:] - new_choices.append(j) - action_queue.append([seed, 0, new_choices, un_jsoned[j][1]]) if __name__ == '__main__': - app.run(host='0.0.0.0', port=8080) - - - -# [START gae_python37_render_template] + app.run(host='0.0.0.0', port=8080) \ No newline at end of file diff --git a/generate.sh b/other/generate.sh similarity index 100% rename from generate.sh rename to other/generate.sh diff --git a/other/generate_cache.py b/other/generate_cache.py new file mode 100644 index 0000000..f4a057a --- /dev/null +++ b/other/generate_cache.py @@ -0,0 +1,51 @@ +def generate_cache(): + start_seed = int(sys.argv[1]) + end_seed = int(sys.argv[2]) + + # Generate story sections + prompt_num = 0 + action_queue = [] + prompt = prompts[prompt_num] + for seed in range(start_seed, end_seed): + result = retrieve_from_cache(seed, prompt_num, [], "story") + if result is not None: + response = result + else: + prompt = prompts[prompt_num] + # print("\n Story prompt is ", prompt) + response = generate_story_block(prompt) + # print("\n Story response is ", response) + cache_file(seed, prompt_num, [], response, "story") + + action_queue.append([seed, 0, [], response]) + + while (True): + + next_gen = action_queue.pop(0) + seed = next_gen[0] + prompt_num = next_gen[1] + choices = next_gen[2] + last_action_result = next_gen[3] + + action_results = retrieve_from_cache(seed, prompt_num, choices, "choices") + + if action_results is not None: + response = action_results + + else: + if len(choices) is 0: + prompt = prompts[prompt_num] + last_action_result + else: + prompt = continuing_prompts[prompt_num] + last_action_result + # print("\n\n Action prompt is \n ", prompt) + action_results = [generate_action_result(prompt, phrase) for phrase in phrases] + response = json.dumps(action_results) + + # print("\n\n Action + cache_file(seed, prompt_num, choices, response, "choices") + + un_jsoned = json.loads(response) + for j in range(4): + new_choices = choices[:] + new_choices.append(j) + action_queue.append([seed, 0, new_choices, un_jsoned[j][1]]) \ No newline at end of file diff --git a/story_prompts.yaml b/other/story_prompts.yaml similarity index 100% rename from story_prompts.yaml rename to other/story_prompts.yaml diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b58323ef08d29faff588c8038d46c1686edbdec4 GIT binary patch literal 15406 zcmeHOXJ`~#6rPx9G`2*IVr6YHVj(C76_JQw!vaxwL=8LxLR9Q1N_f~1(O-%WMZtim zsMsLl4+SNfm>@Pp6j4xY&)!W;EIIFfN6#>s&Fsw1PG)z}19xZU-qUWs_nfnumY^kS zsi~TJ2DHK?P0Q9aEfDzmotdU-#VRi=>sNV(rd6bCTBgELB#Po^zIs@}KdPWcB?>cv z#x1SLswcNelO~jwmL_FEPm}@2O3!A^n$g?0Z>fL({y{kX`t_st@847N=FNl3jQom= zi)roJwLv)R)~%zxd-n$A8)@-Ae*Ad4bLS2X9z3{Sx_kF7O`0^xmOd#diC(^ZN%!vE zqiff$al-rS*RQE*)26oc&|&A!owRc0N*#CAs#Uam_ip{$th4z$CntxlT)Cp-U%h&j z#*Q7Uf1B~m-{_+!Po7Zk-o2?;uU_=**)vK^Oms{Sep|P0CFqTMY~Q{;ELzZy7%_s| z?(*f!G-}kSu;~*L66nE$2lVjaL&Cecj!wQY)>^b^VMkkU4mja!z=>oI3aw)29r)6wP-R6b{ijl$N_OoMX*py-7G#R-NO`)YmwLOUkCe`@Hn-B#kN&ojZJVEx zlA^Cw;f~9mJ$o{3%a$!|govllog&iA8RXUkOF~#V>&Y*e4jsm zo&amstZ~ezsHli(Dk>@*(=;R-dGqGYV_vs!-*(LF)~#Divv~1h$23;*J9g|y-@big ze%QOM@FYJgD~oZzfB#Nhx^%I{7rIc-GiS~)&y5>5+Vb17Week$mX_M$hLUM4D<~*n zp4j*D^YcTd$B!Q~Zed}eXYz5rtF5hNzD|D7U+L-Tp297`NyzlQVPx^-)+uCC_w2 zk;`VzoEcQs5HB}*I5U3y_>tSWTeohy9K2(nsH&=>R;^m;`EF#`(HuB%fa{6&7F?{e zfFnna=y_7+^>gafsVoa)U3iz3m2n>WNAeo$iM!;xckg&_#hAw$kG4m@I5^XLq95*} zfaS}V)53)d`F;QX{hsi4(r&oR0xn&;q@NF_Oqt@Fe7Otbe1m-!cYE}U6WzVS!ChJa z`+-+{o$|riv~%aqoFX}6I+fRmc+tEA$X(F){`=LQau1D`eB&M1ue+eMxyV*c@%sYo zB+5jq{jHLXokU@<={8?I%T=mYDVlS~YRp0>=vJvxfl4qp15#A_S0$8L(Z*VS?Ju2C zhrd+9cdY4Xrw?>SKa|Cx?ov05rK&jAKUU|ew6EPW7S|a&oqyZ%?%li7=+UD&jT|}B zvv$bN&er+D#@JZ%am<)8e5bu|mYr{rmT+UAuO!<-s0w{rYvC-{#GmUGs8Uw?2LP@SPk& zKYaK=6DLk|Efe=$_+A09u?!zR+%+$!`nPS{md>6%%Q7);*RNksxc54x7d-e^H*DCT z+pu9P!M#z+8|w*QFMQ)N=gyrwN1Zx#3R^D54s6)~tOc7kZF1EPZt6Km0rDiCFHbg*RHVZZ`8%j`@n$%^|_}j;^GDK$d7f$Tt~z>h;7@2+BymRCgH|< zn00ac4WE?&#!y~f9!;M_LYQ zA13V2R_z3PEPPdBpI*Isb;$Z!@$oX>I3BQ$XJlkp>JR_kqeqXp?cwV{+?SWSxZ#C1 zh3^vpf6MIIvn_SX&CS*C4~PY5)259jt{Yw4(uki7b%0ObiVw!S0M30@cz);O+z1~q z06uo34^ngi&eyMB83*$P=Wr>Dh3E0($5}W0AWp@s(~>1i^m3fP&E?Vl9ye|ruPaaz zW7`|p?mm(0ve_QS(Y0l=Am$dDm1t3TqkC7uXW}Neg>i-@bkMe*p~;x%$ril^8IS%;xB nVou^cenVA(>wtbJRSEMU7U#6gRm5u`<^=8j2mZ7`L@n??ubucm literal 0 HcmV?d00001 diff --git a/templates/index.html b/templates/index.html index 8800ab6..426ca77 100644 --- a/templates/index.html +++ b/templates/index.html @@ -13,7 +13,8 @@ ga('send', 'pageview'); - Dungeon + + AI Dungeon