Infinite Adventures
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[]