|
import os |
|
from typing import List, Optional |
|
PROMPTFILE_PREFIX = 'file::' |
|
|
|
def load_prompts(prompts: List[str], prompt_delimiter: Optional[str]=None) -> List[str]: |
|
"""Loads a set of prompts, both free text and from file. |
|
|
|
Args: |
|
prompts (List[str]): List of free text prompts and prompt files |
|
prompt_delimiter (Optional str): Delimiter for text file |
|
If not provided, assumes the prompt file is a single prompt (non-delimited) |
|
|
|
Returns: |
|
List of prompt string(s) |
|
""" |
|
prompt_strings = [] |
|
for prompt in prompts: |
|
if prompt.startswith(PROMPTFILE_PREFIX): |
|
prompts = load_prompts_from_file(prompt, prompt_delimiter) |
|
prompt_strings.extend(prompts) |
|
else: |
|
prompt_strings.append(prompt) |
|
return prompt_strings |
|
|
|
def load_prompts_from_file(prompt_path: str, prompt_delimiter: Optional[str]=None) -> List[str]: |
|
"""Load a set of prompts from a text fie. |
|
|
|
Args: |
|
prompt_path (str): Path for text file |
|
prompt_delimiter (Optional str): Delimiter for text file |
|
If not provided, assumes the prompt file is a single prompt (non-delimited) |
|
|
|
Returns: |
|
List of prompt string(s) |
|
""" |
|
if not prompt_path.startswith(PROMPTFILE_PREFIX): |
|
raise ValueError(f'prompt_path_str must start with {PROMPTFILE_PREFIX}') |
|
_, prompt_file_path = prompt_path.split(PROMPTFILE_PREFIX, maxsplit=1) |
|
prompt_file_path = os.path.expanduser(prompt_file_path) |
|
if not os.path.isfile(prompt_file_path): |
|
raise FileNotFoundError(f'prompt_file_path={prompt_file_path!r} does not match any existing files.') |
|
with open(prompt_file_path, 'r') as f: |
|
prompt_string = f.read() |
|
if prompt_delimiter is None: |
|
return [prompt_string] |
|
return [i for i in prompt_string.split(prompt_delimiter) if i] |