@@ -176,12 +176,18 @@ def test_apply_chat_template():
176176 ({"type" : "json_object" , "schema" : {"const" : "42" }}, 6 , "\" 42\" " ),
177177 ({"type" : "json_object" , "schema" : {"items" : [{"type" : "integer" }]}}, 10 , "[ -3000 ]" ),
178178 ({"type" : "json_schema" , "json_schema" : {"schema" : {"const" : "foooooo" }}}, 10 , "\" foooooo\" " ),
179+ # json_schema with name field (OpenAI-style)
180+ ({"type" : "json_schema" , "json_schema" : {"name" : "test" , "schema" : {"const" : "bar" }, "strict" : True }}, 6 , "\" bar\" " ),
179181 ({"type" : "json_object" }, 10 , "(\\ {|John)+" ),
180182 ({"type" : "sound" }, 0 , None ),
181183 # invalid response format (expected to fail)
182184 ({"type" : "json_object" , "schema" : 123 }, 0 , None ),
183185 ({"type" : "json_object" , "schema" : {"type" : 123 }}, 0 , None ),
184186 ({"type" : "json_object" , "schema" : {"type" : "hiccup" }}, 0 , None ),
187+ # json_schema missing required json_schema.schema field (should fail)
188+ ({"type" : "json_schema" , "json_schema" : {"name" : "test" }}, 0 , None ),
189+ ({"type" : "json_schema" , "json_schema" : {}}, 0 , None ),
190+ ({"type" : "json_schema" }, 0 , None ),
185191])
186192def test_completion_with_response_format (response_format : dict , n_predicted : int , re_content : str | None ):
187193 global server
@@ -203,6 +209,31 @@ def test_completion_with_response_format(response_format: dict, n_predicted: int
203209 assert "error" in res .body
204210
205211
212+ @pytest .mark .parametrize ("response_format,expected_error_message" , [
213+ # json_schema type requires json_schema.schema to be set
214+ ({"type" : "json_schema" , "json_schema" : {"name" : "test" }}, "json_schema.schema" ),
215+ ({"type" : "json_schema" , "json_schema" : {}}, "json_schema.schema" ),
216+ ({"type" : "json_schema" }, "json_schema.schema" ),
217+ # invalid response_format type should mention valid options
218+ ({"type" : "invalid_type" }, "json_schema" ),
219+ ])
220+ def test_response_format_error_messages (response_format : dict , expected_error_message : str ):
221+ """Test that invalid response_format configurations return helpful error messages."""
222+ global server
223+ server .start ()
224+ res = server .make_request ("POST" , "/chat/completions" , data = {
225+ "max_tokens" : 10 ,
226+ "messages" : [
227+ {"role" : "user" , "content" : "test" },
228+ ],
229+ "response_format" : response_format ,
230+ })
231+ assert res .status_code == 400
232+ assert "error" in res .body
233+ assert expected_error_message in res .body ["error" ]["message" ], \
234+ f"Expected '{ expected_error_message } ' in error message, got: { res .body ['error' ]['message' ]} "
235+
236+
206237@pytest .mark .parametrize ("jinja,json_schema,n_predicted,re_content" , [
207238 (False , {"const" : "42" }, 6 , "\" 42\" " ),
208239 (True , {"const" : "42" }, 6 , "\" 42\" " ),
0 commit comments