Exemplo n.º 1
0
def getGenerator():
    colPrint(
        "\nInitializing AI Engine! (This might take a few minutes)\n",
        colors["loading-message"],
    )
    models = [x for x in Path('models').iterdir() if x.is_dir()]
    if not models:
        raise FileNotFoundError(
            'There are no models in the models directory! You must download a pytorch compatible model!'
        )
    elif len(models) > 1:
        colPrint(
            "You have multiple models in your models folder. Please select one to load:",
            colors['message'])
        for n, model_path in enumerate(models):
            colPrint("{}: {}".format(n, model_path.name), colors['menu'])

        model = models[getNumberInput(len(models) - 1)]
    else:
        model = models[0]
        logger.info("Using model: " + str(model))
    return GPT2Generator(
        model_path=model,
        generate_num=settings.getint("generate-num"),
        temperature=settings.getfloat("temp"),
        top_k=settings.getint("top-keks"),
        top_p=settings.getfloat("top-p"),
        repetition_penalty=settings.getfloat("rep-pen"),
    )
Exemplo n.º 2
0
def instructions():
    if settings.getboolean("console-bell"):
        bell = "on"
    else:
        bell = "off"
    if settings.getboolean("action-d20"):
        d20 = "on"
    else:
        d20 = "off"
    print(
        '\033[' + colors["instructions"] + 'm' +
        'AID2: Clover Edition Instructions: \n Enter actions starting with a verb ex. "go to the tavern" or "attack the orc."\n To speak enter say "(thing you want to say)" or just "(thing you want to say)"'
    )
    print('The following commands can be entered for any action:')
    print(
        '  "/revert"            Reverts the last action allowing you to pick a different action.'
    )
    print('  "/quit"              Quits the game and saves')
    print(
        '  "/menu"              Starts a new game and saves your current one')
    print('  "/retry"             Retries the last action')
    print('  "/restart"           Restarts the current story')
    print(
        '  "/print"             Prints a transcript of your adventure (without extra newline formatting)'
    )
    print('  "/help"              Prints these instructions again')
    print(
        '  "/set SETTING VALUE" Sets the specified setting to the specified value.:'
    )
    print(
        '      temp            Higher values make the AI more random. Default: 0.4 | Current:',
        settings.getfloat("temp"))
    print(
        '      rep-pen         Controls how repetitive the AI is allowed to be. Default: 1.2 | Current:',
        settings.getfloat("rep-pen"))
    print(
        '      text-wrap-width Maximum width of lines printed by computer. Default: 80 | Current:',
        settings.getint("text-wrap-width"))
    print(
        '      console-bell    Beep after AI generates text? Default: on | Current:',
        bell)
    print(
        '      top-keks        Number of words the AI can randomly choose. Default: 20 | Current:',
        settings.getint("top-keks"))
    print('      generate-num    Default: 60 | Current:',
          settings.getint("generate-num"))
    print('      top-p           Default: 0.9 | Current:',
          settings.getfloat("top-p"))
    print('      log-level       Default: 3 | Current:',
          settings.getint("log-level"))
    print(
        '      action-sugg     How many actions to generate, 0 is off. Default: 4 | Current:',
        settings.getint("action-sugg"))
    print(
        '      action-d20      Make actions difficult. Default: on | Current:',
        d20)
    print(
        '      action-temp     How random the suggested actions are. Default: 1 | Current:',
        settings.getfloat("action-temp"), '\033[39m')
Exemplo n.º 3
0
 def get_suggestion(self):
     return re.sub('\n.*', '',
                   self.generator.generate_raw(
                       self.get_story() + "\n\n> You",
                       self.context,
                       temperature=settings.getfloat('action-temp'),
                       top_p=settings.getfloat('top-p'),
                       top_k=settings.getint('top-keks'),
                       repetition_penalty=1))
Exemplo n.º 4
0
 def getSuggestion(self):
     #temporary fix (TODO)
     return re.sub(
         '\n.*', '',
         self.generator.generate_raw(
             self.getStory() + "\n\n> You",
             self.prompt,
             temperature=settings.getfloat('action-temp'),
             top_p=settings.getfloat('top-p'),
             top_k=settings.getint('top-keks'),
             repetition_penalty=1))
Exemplo n.º 5
0
 def to_dict(self):
     res = {}
     res["temp"] = settings.getfloat('temp')
     res["top-p"] = settings.getfloat("top-p")
     res["top-keks"] = settings.getint("top-keks")
     res["rep-pen"] = settings.getfloat("rep-pen")
     res["context"] = self.context
     res["memory"] = self.memory
     res["actions"] = self.actions
     res["results"] = self.results
     return res
Exemplo n.º 6
0
 def act(self, action):
     assert (self.context.strip() + action.strip())
     assert (settings.getint('top-keks') is not None)
     self.actions.append(format_result(action))
     result = self.generator.generate(
         self.get_story() + action,
         self.context + ' '.join(self.memory),
         temperature=settings.getfloat('temp'),
         top_p=settings.getfloat('top-p'),
         top_k=settings.getint('top-keks'),
         repetition_penalty=settings.getfloat('rep-pen'))
     self.results.append(format_result(result))
     return self.results[-1]
Exemplo n.º 7
0
    def act(self, action):
        assert (self.prompt + action)
        results = []
        for i in range(self.numResults):
            assert (settings.getint('top-keks') is not None)
            results.append(
                self.generator.generate(
                    self.getStory() + action,
                    self.prompt,
                    temperature=settings.getfloat('temp'),
                    top_p=settings.getfloat('top-p'),
                    top_k=settings.getint('top-keks'),
                    repetition_penalty=settings.getfloat('rep-pen')))
            #self.longTermMemory.join('\n\n'), self.prompt))

        self.story.append([action, results])
        return results
Exemplo n.º 8
0
    def get_action(self):
        # While we want the story to be on track, but not to on track that it loops
        # the actions can be quite random, and this helps inject some user curated randomness
        # and prevent loops. So lets make the actions quite random, and prevent duplicates while we are at it

        # what to feed to model?
        mem_ind = random.randint(1, 6)  # How many steps to include
        sample = random.randint(0, 1)  # Random steps from history?
        include_prompt = random.randint(0, 1)  # Include the initial promts
        predicates = ['You try to ', 'You say "', 'You start to ',
                      '"']  # The model has to continue from here

        predicate = random.sample(predicates, 1)[0]
        action_prompt = self.story_manager.story_context(
            mem_ind, sample, include_prompt)
        action_prompt[-1] = action_prompt[-1].strip() + "\n> " + predicate

        result_raw = self.story_manager.generator.generate_raw(
            action_prompt,
            generate_num=settings.getint("action-generate-num"),
            temperature=settings.getfloat("action-temp"),
            stop_tokens=self.story_manager.generator.tokenizer.encode(
                ["<|endoftext|>", "\n", ">"])
            # stop_tokens=self.generator.tokenizer.encode(['>', '<|endoftext|>'])
        )
        logger.info(
            "get_action (mem_ind=%s, sample=%s, include_prompt=%s, predicate=`%r`) -> %r",
            mem_ind, sample, include_prompt, predicate, result_raw)
        result = predicate + result_raw.lstrip()
        result = clean_suggested_action(
            result, min_length=settings.getint("action-min-length"))
        # Sometimes the suggestion start with "You" we will add that on later anyway so remove it here
        result = re.sub("^ ?[Yy]ou try to ?", "You ", result)
        result = re.sub("^ ?[Yy]ou start to ?", "You ", result)
        result = re.sub("^ ?[Yy]ou say \"", "\"", result)
        result = re.sub("^ ?[Yy]ou ?", "", result)
        return result