@@ -2404,19 +2404,57 @@ static void test_template_output_peg_parsers(bool detailed_debug) {
24042404 .expect_reconstruction ()
24052405 .run ();
24062406
2407- // Test optional argument ordering (2 required + 4 optional)
2407+ // Test flexible optional argument ordering (2 required + 4 optional, reversed optional order )
24082408 tst.test (
24092409 " <tool_call>\n "
24102410 " <function=tool_2req_4opt>\n "
24112411 " <parameter=req1>\n hello\n </parameter>\n "
24122412 " <parameter=req2>\n 42\n </parameter>\n "
2413- " <parameter=opt2>\n 200\n </parameter>\n "
24142413 " <parameter=opt4>\n 100\n </parameter>\n "
2414+ " <parameter=opt2>\n 200\n </parameter>\n "
24152415 " </function>\n "
24162416 " </tool_call>" )
24172417 .tools ({ tool_2req_4opt })
24182418 .expect_tool_calls ({
2419- { " tool_2req_4opt" , R"( {"req1": "hello", "req2": 42, "opt2": 200, "opt4": 100})" , {} },
2419+ { " tool_2req_4opt" , R"( {"req1": "hello", "req2": 42, "opt4": 100, "opt2": 200})" , {} },
2420+ })
2421+ .expect_reconstruction ()
2422+ .run ();
2423+
2424+ // Test flexible optional argument ordering (2 required + 5 optional, reversed optional order)
2425+ tst.test (
2426+ " <tool_call>\n "
2427+ " <function=tool_2req_5opt>\n "
2428+ " <parameter=req1>\n world\n </parameter>\n "
2429+ " <parameter=req2>\n 7\n </parameter>\n "
2430+ " <parameter=opt5>\n last\n </parameter>\n "
2431+ " <parameter=opt3>\n middle\n </parameter>\n "
2432+ " <parameter=opt1>\n first\n </parameter>\n "
2433+ " </function>\n "
2434+ " </tool_call>" )
2435+ .tools ({ tool_2req_5opt })
2436+ .expect_tool_calls ({
2437+ { " tool_2req_5opt" , R"( {"req1": "world", "req2": 7, "opt5": "last", "opt3": "middle", "opt1": "first"})" , {} },
2438+ })
2439+ .expect_reconstruction ()
2440+ .run ();
2441+
2442+ // Test flexible optional argument ordering (2 required + 5 optional, all 5 in shuffled order)
2443+ tst.test (
2444+ " <tool_call>\n "
2445+ " <function=tool_2req_5opt>\n "
2446+ " <parameter=req1>\n test\n </parameter>\n "
2447+ " <parameter=req2>\n 99\n </parameter>\n "
2448+ " <parameter=opt3>\n c\n </parameter>\n "
2449+ " <parameter=opt1>\n a\n </parameter>\n "
2450+ " <parameter=opt5>\n e\n </parameter>\n "
2451+ " <parameter=opt4>\n 4\n </parameter>\n "
2452+ " <parameter=opt2>\n 2\n </parameter>\n "
2453+ " </function>\n "
2454+ " </tool_call>" )
2455+ .tools ({ tool_2req_5opt })
2456+ .expect_tool_calls ({
2457+ { " tool_2req_5opt" , R"( {"req1": "test", "req2": 99, "opt3": "c", "opt1": "a", "opt5": "e", "opt4": 4, "opt2": 2})" , {} },
24202458 })
24212459 .expect_reconstruction ()
24222460 .run ();
0 commit comments