@@ -28,11 +28,11 @@ def test_init(self):
2828 ChatMessage .from_system ("This is a {{ variable2 }}" ),
2929 ]
3030 )
31- assert builder .required_variables == []
31+ assert builder .required_variables == "*"
3232 assert builder .template [0 ].text == "This is a {{ variable }}"
3333 assert builder .template [1 ].text == "This is a {{ variable2 }}"
3434 assert builder ._variables is None
35- assert builder ._required_variables is None
35+ assert builder ._required_variables == "*"
3636
3737 # we have inputs that contain: template, template_variables + inferred variables
3838 inputs = builder .__haystack_input__ ._sockets_dict
@@ -51,9 +51,9 @@ def test_init_without_template(self):
5151 variables = ["var1" , "var2" ]
5252 builder = ChatPromptBuilder (variables = variables )
5353 assert builder .template is None
54- assert builder .required_variables == []
54+ assert builder .required_variables == "*"
5555 assert builder ._variables == variables
56- assert builder ._required_variables is None
56+ assert builder ._required_variables == "*"
5757
5858 # we have inputs that contain: template, template_variables + variables
5959 inputs = builder .__haystack_input__ ._sockets_dict
@@ -93,10 +93,10 @@ def test_init_with_custom_variables(self):
9393 variables = ["var1" , "var2" , "var3" ]
9494 template = [ChatMessage .from_user ("Hello, {{ var1 }}, {{ var2 }}!" )]
9595 builder = ChatPromptBuilder (template = template , variables = variables )
96- assert builder .required_variables == []
96+ assert builder .required_variables == "*"
9797 assert builder ._variables == variables
9898 assert builder .template [0 ].text == "Hello, {{ var1 }}, {{ var2 }}!"
99- assert builder ._required_variables is None
99+ assert builder ._required_variables == "*"
100100
101101 # we have inputs that contain: template, template_variables + variables
102102 inputs = builder .__haystack_input__ ._sockets_dict
@@ -132,11 +132,18 @@ def test_run_without_input(self):
132132 res = builder .run ()
133133 assert res == {"prompt" : [ChatMessage .from_user ("This is a template without input" )]}
134134
135- def test_run_with_missing_input (self ):
136- builder = ChatPromptBuilder (template = [ChatMessage .from_user ("This is a {{ variable }}" )])
135+ def test_run_with_missing_optional_input (self ):
136+ builder = ChatPromptBuilder (
137+ template = [ChatMessage .from_user ("This is a {{ variable }}" )], required_variables = None
138+ )
137139 res = builder .run ()
138140 assert res == {"prompt" : [ChatMessage .from_user ("This is a " )]}
139141
142+ def test_run_with_missing_required_input_default (self ):
143+ builder = ChatPromptBuilder (template = [ChatMessage .from_user ("This is a {{ variable }}" )])
144+ with pytest .raises (ValueError , match = "variable" ):
145+ builder .run ()
146+
140147 def test_run_with_missing_required_input (self ):
141148 builder = ChatPromptBuilder (
142149 template = [ChatMessage .from_user ("This is a {{ foo }}, not a {{ bar }}" )], required_variables = ["foo" , "bar" ]
@@ -163,7 +170,7 @@ def test_run_with_variables(self):
163170 variables = ["var1" , "var2" , "var3" ]
164171 template = [ChatMessage .from_user ("Hello, {{ name }}! {{ var1 }}" )]
165172
166- builder = ChatPromptBuilder (template = template , variables = variables )
173+ builder = ChatPromptBuilder (template = template , variables = variables , required_variables = None )
167174
168175 template_variables = {"name" : "John" }
169176 expected_result = {"prompt" : [ChatMessage .from_user ("Hello, John! How are you?" )]}
@@ -173,7 +180,7 @@ def test_run_with_variables(self):
173180 def test_run_with_variables_and_runtime_template (self ):
174181 variables = ["var1" , "var2" , "var3" ]
175182
176- builder = ChatPromptBuilder (variables = variables )
183+ builder = ChatPromptBuilder (variables = variables , required_variables = None )
177184
178185 template = [ChatMessage .from_user ("Hello, {{ name }}! {{ var1 }}" )]
179186 template_variables = {"name" : "John" }
@@ -209,7 +216,7 @@ def test_run_overwriting_default_template_with_variables(self):
209216 variables = ["var1" , "var2" , "name" ]
210217 default_template = [ChatMessage .from_user ("Hello, {{ name }}!" )]
211218
212- builder = ChatPromptBuilder (template = default_template , variables = variables )
219+ builder = ChatPromptBuilder (template = default_template , variables = variables , required_variables = None )
213220
214221 template = [ChatMessage .from_user ("Hello, {{ var1 }} {{ name }}!" )]
215222 expected_result = {"prompt" : [ChatMessage .from_user ("Hello, Big John!" )]}
@@ -346,15 +353,26 @@ def test_example_in_pipeline_simple(self):
346353 }
347354 assert result == expected_dynamic
348355
349- def test_warning_no_required_variables (self , caplog ):
356+ def test_warning_when_required_variables_explicitly_none (self , caplog ):
357+ with caplog .at_level (logging .WARNING ):
358+ _ = ChatPromptBuilder (
359+ template = [
360+ ChatMessage .from_system ("Write your response in this language:{{language}}" ),
361+ ChatMessage .from_user ("Tell me about {{location}}" ),
362+ ],
363+ required_variables = None ,
364+ )
365+ assert "explicitly set to `None`" in caplog .text
366+
367+ def test_no_warning_with_default_required_variables (self , caplog ):
350368 with caplog .at_level (logging .WARNING ):
351369 _ = ChatPromptBuilder (
352370 template = [
353371 ChatMessage .from_system ("Write your response in this language:{{language}}" ),
354372 ChatMessage .from_user ("Tell me about {{location}}" ),
355373 ]
356374 )
357- assert "ChatPromptBuilder has 2 prompt variables, but ` required_variables` is not set. " in caplog .text
375+ assert "required_variables" not in caplog .text
358376
359377
360378class TestChatPromptBuilderWithJinja2TimeExtension :
@@ -697,7 +715,7 @@ def test_from_dict_template_none(self):
697715
698716 assert comp .template is None
699717 assert comp ._variables is None
700- assert comp ._required_variables is None
718+ assert comp ._required_variables == "*"
701719
702720 def test_chat_message_list_with_templatize_part_init_raises_error (self ):
703721 template = [ChatMessage .from_user ("This is a {{ variable | templatize_part }}" )]
@@ -722,7 +740,7 @@ def test_init(self):
722740
723741 assert builder .template == template
724742 assert builder ._variables is None
725- assert builder ._required_variables is None
743+ assert builder ._required_variables == "*"
726744 assert builder .variables == ["name" ]
727745
728746 def test_init_with_invalid_template (self ):
@@ -774,13 +792,13 @@ def test_run_without_input(self):
774792 result = builder .run ()
775793 assert result ["prompt" ] == [ChatMessage .from_user ("Hello, my name is Lukas!" )]
776794
777- def test_run_with_missing_input (self ):
795+ def test_run_with_missing_optional_input (self ):
778796 template = """
779797 {% message role="user" %}
780798 Hello, my name is {{name}}!
781799 {% endmessage %}
782800 """
783- builder = ChatPromptBuilder (template = template )
801+ builder = ChatPromptBuilder (template = template , required_variables = None )
784802 result = builder .run ()
785803 assert result ["prompt" ] == [ChatMessage .from_user ("Hello, my name is !" )]
786804
@@ -826,7 +844,7 @@ def test_run_overwriting_default_template(self):
826844 Hello, my name is {{name}}!
827845 {% endmessage %}
828846 """
829- builder = ChatPromptBuilder (template = initial_template )
847+ builder = ChatPromptBuilder (template = initial_template , required_variables = None )
830848
831849 runtime_template = """
832850 {% message role="user" %}
0 commit comments