From 84f8b99cf5086c7e7a65450792474e341aeaf209 Mon Sep 17 00:00:00 2001 From: Sadra Barikbin Date: Sun, 27 Jul 2025 01:47:10 +0330 Subject: [PATCH] Apply change --- libs/core/langchain_core/prompts/prompt.py | 13 ++++----- .../tests/unit_tests/prompts/test_prompt.py | 27 +++++++++++++++++++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/libs/core/langchain_core/prompts/prompt.py b/libs/core/langchain_core/prompts/prompt.py index 6b77a4e71cb..8c9732b2daf 100644 --- a/libs/core/langchain_core/prompts/prompt.py +++ b/libs/core/langchain_core/prompts/prompt.py @@ -137,12 +137,9 @@ 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." - raise ValueError(msg) + 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) diff --git a/libs/core/tests/unit_tests/prompts/test_prompt.py b/libs/core/tests/unit_tests/prompts/test_prompt.py index e092eb66581..12315e1a264 100644 --- a/libs/core/tests/unit_tests/prompts/test_prompt.py +++ b/libs/core/tests/unit_tests/prompts/test_prompt.py @@ -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") + ) \ No newline at end of file