Spaces:
Runtime error
Runtime error
File size: 1,645 Bytes
bddc905 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
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
|