Infinite Adventures

In[]:=
lm=NetModel[{"GPT2 Transformer Trained on WebText Data","Task""LanguageModeling","Size""774M"}];​​generateSample[languagemodel_][input_String,numTokens_:1000,temperature_:0.75]:=Nest[Function[StringJoin[#,languagemodel[#,{"RandomSample","Temperature"temperature},TargetDevice"GPU"]]],input,numTokens];
In[]:=
wholestory={};story=AskFunction[AskDisplay["Infinite Adventures Interactive Story Generator. Game ends when a story of 4500 characters is generated. Stop any time by pressing Alt + .. Do not press enter after your response. Press submit instead."];​​Ask[{"name","Name your protagonist."}"String"];Ask[{"nameOfLand","Where does your character live?"}"String"];Ask[{"profession","What is your protagonist's profession?"}"String"];​​If[Characters[ToLowerCase[AskedValue["profession"]]][[1]]"a"||Characters[AskedValue["profession"]][[1]]"e"||Characters[ToLowerCase[AskedValue["profession"]]][[1]]"i"||Characters[ToLowerCase[AskedValue["profession"]]][[1]]"o"||Characters[ToLowerCase[AskedValue["profession"]]][[1]]"u",prefix="an",prefix="a"];​​Ask[{"mission","What is your character's mission?"}"String"];​​string="Your name is "<>AskedValue["name"]<>". You are "<>prefix<>" "<>AskedValue["profession"]<>" in the land of "<>AskedValue["nameOfLand"]<>". Your mission is to "<>AskedValue["mission"]<>".";​​AppendTo[wholestory,TextSentences[string]];​​wholestory=Flatten[wholestory];​​While[StringLength[StringRiffle[wholestory]]≤4500,​​computedstring=StringReplace[Drop[Cases[TextSentences[StringReplace[generateSample[lm][StringRiffle[DeleteDuplicates[Flatten[wholestory]]],60],{"//n"" ","\\"->"","\\\\"->"","_"""}]],_String],-1],"_"""];​​AppendTo[wholestory,DeleteDuplicates[Flatten[computedstring]]];​​wholestory=DeleteDuplicates[Flatten[wholestory]];​​temp=PrintTemporary[StringRiffle[wholestory]];​​Ask[{"response","What is your response?"}"String"];​​NotebookDelete[temp];​​AppendTo[wholestory,TextSentences[AskedValue["response"]]];​​wholestory=DeleteDuplicates[Flatten[wholestory]];​​Ask["response"]=.;​​NotebookDelete[temp];Print[""];​​];Print["The story has finished: "<>StringRiffle[DeleteDuplicates[Flatten[wholestory]]]];wholestory={};string={};computedstring={}];
In[]:=
story[]