Apply change

This commit is contained in:
Sadra Barikbin 2025-07-27 01:47:10 +03:30
parent 5ecbb5f277
commit 84f8b99cf5
2 changed files with 32 additions and 8 deletions

View File

@ -137,11 +137,8 @@ class PromptTemplate(StringPromptTemplate):
"""Override the + operator to allow for combining prompt templates."""
# Allow for easy combining
if isinstance(other, PromptTemplate):
if self.template_format != "f-string":
msg = "Adding prompt templates only supported for f-strings."
raise ValueError(msg)
if other.template_format != "f-string":
msg = "Adding prompt templates only supported for f-strings."
if self.template_format != other.template_format:
msg = "Cannot add two templates of different formats"
raise ValueError(msg)
input_variables = list(
set(self.input_variables) | set(other.input_variables)
@ -159,11 +156,11 @@ class PromptTemplate(StringPromptTemplate):
template=template,
input_variables=input_variables,
partial_variables=partial_variables,
template_format="f-string",
template_format=self.template_format,
validate_template=validate_template,
)
if isinstance(other, str):
prompt = PromptTemplate.from_template(other)
prompt = PromptTemplate.from_template(other, template_format=self.template_format)
return self + prompt
msg = f"Unsupported operand type for +: {type(other)}"
raise NotImplementedError(msg)

View File

@ -681,3 +681,30 @@ def test_prompt_with_template_variable_name_jinja2() -> None:
template = "This is a {{template}} test."
prompt = PromptTemplate.from_template(template, template_format="jinja2")
assert prompt.invoke({"template": "bar"}).to_string() == "This is a bar test."
def test_prompt_template_add_with_with_another_format():
with pytest.raises(match=r"Cannot add two templates"):
PromptTemplate.from_template("This is a {template}") + PromptTemplate.from_template("So {{this}} is", template_format="mustache")
@pytest.mark.parametrize(
"template_format, prompt1, prompt2",
[
("f-string", "This is a {variable}", ". This is {another_variable}"),
pytest.param("jinja2", "This is a {{variable}}", ". This is {{another_variable}}", marks=[pytest.mark.requires("jinja2")]),
("mustache", "This is a {{variable}}", ". This is {{another_variable}}"),
]
)
def test_prompt_template_add(template_format: str, prompt1: str, prompt2: str) -> None:
first_prompt = PromptTemplate.from_template(prompt1, template_format=template_format)
second_prompt = PromptTemplate.from_template(prompt2, template_format=template_format)
concated_prompt = first_prompt + second_prompt
prompt_of_concated = PromptTemplate.from_template(prompt1 + prompt2, template_format=template_format)
assert concated_prompt.input_variables == prompt_of_concated.input_variables
assert (
concated_prompt.format(variable="template", another_variable="other_template") ==
prompt_of_concated.format(variable="template", another_variable="other_template")
)