Spaces:
Runtime error
Runtime error
| import logging | |
| import typing as t | |
| from parsing import parse_messages_from_str | |
| logger = logging.getLogger(__name__) | |
| def build_prompt_for( | |
| history: t.List[str], | |
| user_message: str, | |
| char_name: str, | |
| char_persona: t.Optional[str] = None, | |
| example_dialogue: t.Optional[str] = None, | |
| world_scenario: t.Optional[str] = None, | |
| ) -> str: | |
| '''Converts all the given stuff into a proper input prompt for the model.''' | |
| # If example dialogue is given, parse the history out from it and append | |
| # that at the beginning of the dialogue history. | |
| example_history = parse_messages_from_str( | |
| example_dialogue, ["You", char_name]) if example_dialogue else [] | |
| concatenated_history = [*example_history, *history] | |
| # Construct the base turns with the info we already have. | |
| prompt_turns = [ | |
| # TODO(11b): Shouldn't be here on the original 350M. | |
| "<START>", | |
| # TODO(11b): Arbitrary limit. See if it's possible to vary this | |
| # based on available context size and VRAM instead. | |
| *concatenated_history[-8:], | |
| f"You: {user_message}", | |
| f"{char_name}:", | |
| ] | |
| # If we have a scenario or the character has a persona definition, add those | |
| # to the beginning of the prompt. | |
| if world_scenario: | |
| prompt_turns.insert( | |
| 0, | |
| f"Scenario: {world_scenario}", | |
| ) | |
| if char_persona: | |
| prompt_turns.insert( | |
| 0, | |
| f"{char_name}'s Persona: {char_persona}", | |
| ) | |
| # Done! | |
| logger.debug("Constructed prompt is: `%s`", prompt_turns) | |
| prompt_str = "\n".join(prompt_turns) | |
| return prompt_str | |