2023-08-06 20:49:27 -04:00
|
|
|
import re
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
import yaml
|
|
|
|
|
|
|
|
from modules import utils
|
|
|
|
from modules.text_generation import get_encoded_length
|
|
|
|
|
|
|
|
|
|
|
|
def load_prompt(fname):
|
|
|
|
if fname in ['None', '']:
|
|
|
|
return ''
|
|
|
|
elif fname.startswith('Instruct-'):
|
|
|
|
fname = re.sub('^Instruct-', '', fname)
|
2023-08-06 20:50:07 -04:00
|
|
|
file_path = Path(f'instruction-templates/{fname}.yaml')
|
2023-08-06 20:49:27 -04:00
|
|
|
if not file_path.exists():
|
|
|
|
return ''
|
|
|
|
|
|
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|
|
|
data = yaml.safe_load(f)
|
|
|
|
output = ''
|
|
|
|
if 'context' in data:
|
|
|
|
output += data['context']
|
|
|
|
|
|
|
|
replacements = {
|
|
|
|
'<|user|>': data['user'],
|
|
|
|
'<|bot|>': data['bot'],
|
|
|
|
'<|user-message|>': 'Input',
|
|
|
|
}
|
|
|
|
|
|
|
|
output += utils.replace_all(data['turn_template'].split('<|bot-message|>')[0], replacements)
|
|
|
|
return output.rstrip(' ')
|
|
|
|
else:
|
|
|
|
file_path = Path(f'prompts/{fname}.txt')
|
|
|
|
if not file_path.exists():
|
|
|
|
return ''
|
|
|
|
|
|
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|
|
|
text = f.read()
|
|
|
|
if text[-1] == '\n':
|
|
|
|
text = text[:-1]
|
|
|
|
|
|
|
|
return text
|
|
|
|
|
|
|
|
|
|
|
|
def count_tokens(text):
|
|
|
|
try:
|
|
|
|
tokens = get_encoded_length(text)
|
|
|
|
return f'{tokens} tokens in the input.'
|
|
|
|
except:
|
|
|
|
return 'Couldn\'t count the number of tokens. Is a tokenizer loaded?'
|