Spaces:
Runtime error
Runtime error
"""Test functionality related to prompts.""" | |
import pytest | |
from langchain.prompts.prompt import PromptTemplate | |
def test_prompt_valid() -> None: | |
"""Test prompts can be constructed.""" | |
template = "This is a {foo} test." | |
input_variables = ["foo"] | |
prompt = PromptTemplate(input_variables=input_variables, template=template) | |
assert prompt.template == template | |
assert prompt.input_variables == input_variables | |
def test_prompt_from_template() -> None: | |
"""Test prompts can be constructed from a template.""" | |
# Single input variable. | |
template = "This is a {foo} test." | |
prompt = PromptTemplate.from_template(template) | |
expected_prompt = PromptTemplate(template=template, input_variables=["foo"]) | |
assert prompt == expected_prompt | |
# Multiple input variables. | |
template = "This {bar} is a {foo} test." | |
prompt = PromptTemplate.from_template(template) | |
expected_prompt = PromptTemplate(template=template, input_variables=["bar", "foo"]) | |
assert prompt == expected_prompt | |
# Multiple input variables with repeats. | |
template = "This {bar} is a {foo} test {foo}." | |
prompt = PromptTemplate.from_template(template) | |
expected_prompt = PromptTemplate(template=template, input_variables=["bar", "foo"]) | |
assert prompt == expected_prompt | |
def test_prompt_missing_input_variables() -> None: | |
"""Test error is raised when input variables are not provided.""" | |
template = "This is a {foo} test." | |
input_variables: list = [] | |
with pytest.raises(ValueError): | |
PromptTemplate(input_variables=input_variables, template=template) | |
def test_prompt_extra_input_variables() -> None: | |
"""Test error is raised when there are too many input variables.""" | |
template = "This is a {foo} test." | |
input_variables = ["foo", "bar"] | |
with pytest.raises(ValueError): | |
PromptTemplate(input_variables=input_variables, template=template) | |
def test_prompt_wrong_input_variables() -> None: | |
"""Test error is raised when name of input variable is wrong.""" | |
template = "This is a {foo} test." | |
input_variables = ["bar"] | |
with pytest.raises(ValueError): | |
PromptTemplate(input_variables=input_variables, template=template) | |
def test_prompt_from_examples_valid() -> None: | |
"""Test prompt can be successfully constructed from examples.""" | |
template = """Test Prompt: | |
Question: who are you? | |
Answer: foo | |
Question: what are you? | |
Answer: bar | |
Question: {question} | |
Answer:""" | |
input_variables = ["question"] | |
example_separator = "\n\n" | |
prefix = """Test Prompt:""" | |
suffix = """Question: {question}\nAnswer:""" | |
examples = [ | |
"""Question: who are you?\nAnswer: foo""", | |
"""Question: what are you?\nAnswer: bar""", | |
] | |
prompt_from_examples = PromptTemplate.from_examples( | |
examples, | |
suffix, | |
input_variables, | |
example_separator=example_separator, | |
prefix=prefix, | |
) | |
prompt_from_template = PromptTemplate( | |
input_variables=input_variables, template=template | |
) | |
assert prompt_from_examples.template == prompt_from_template.template | |
assert prompt_from_examples.input_variables == prompt_from_template.input_variables | |
def test_prompt_invalid_template_format() -> None: | |
"""Test initializing a prompt with invalid template format.""" | |
template = "This is a {foo} test." | |
input_variables = ["foo"] | |
with pytest.raises(ValueError): | |
PromptTemplate( | |
input_variables=input_variables, template=template, template_format="bar" | |
) | |
def test_prompt_from_file() -> None: | |
"""Test prompt can be successfully constructed from a file.""" | |
template_file = "tests/unit_tests/data/prompt_file.txt" | |
input_variables = ["question"] | |
prompt = PromptTemplate.from_file(template_file, input_variables) | |
assert prompt.template == "Question: {question}\nAnswer:" | |