diff --git a/.gitignore b/.gitignore index 4049566..5f91bce 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ dist/ .DS_Store Testing/ .vscode/ -__pycache__/ \ No newline at end of file +__pycache__/ +clangd/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a3760c..95dabe7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,20 +55,20 @@ endif() include(FetchContent) # Fetch nlohmann/json -FetchContent_Declare(json URL https://github.com/nlohmann/json/archive/refs/heads/develop.zip) +FetchContent_Declare(json URL https://github.com/nlohmann/json/archive/refs/tags/v3.12.0.zip) FetchContent_MakeAvailable(json) target_link_libraries(minja INTERFACE nlohmann_json::nlohmann_json) if(MINJA_TEST_ENABLED) if (MINJA_FUZZTEST_ENABLED) # Fetch google/fuzztest (and indirectly, gtest) - FetchContent_Declare(fuzztest URL https://github.com/google/fuzztest/archive/refs/heads/main.zip) + FetchContent_Declare(fuzztest URL https://github.com/google/fuzztest/archive/refs/tags/2025-08-05.zip) FetchContent_MakeAvailable(fuzztest) message(STATUS "${fuzztest_BINARY_DIR}: ${${fuzztest_BINARY_DIR}}") else() # Fetch gtest set(INSTALL_GTEST OFF) - FetchContent_Declare(googletest URL https://github.com/google/googletest/archive/refs/heads/main.zip) + FetchContent_Declare(googletest URL https://github.com/google/googletest/archive/refs/tags/v1.17.0.zip) FetchContent_MakeAvailable(googletest) endif() endif() diff --git a/scripts/fetch_templates_and_goldens.py b/scripts/fetch_templates_and_goldens.py index 6950ffe..573f783 100644 --- a/scripts/fetch_templates_and_goldens.py +++ b/scripts/fetch_templates_and_goldens.py @@ -166,10 +166,14 @@ def __init__(self, template, env=None, filters=None, global_functions=None): }]) caps.supports_tools = "some_tool" in out + caps.requires_non_null_content = \ + (user_needle in self.try_raw_render([dummy_user_msg, {"role": "assistant", "content": ''}])) \ + and (user_needle not in self.try_raw_render([dummy_user_msg, {"role": "assistant", "content": None}])) + def make_tool_calls_msg(tool_calls, content=None): return { "role": "assistant", - "content": content, + "content": "" if content is None and caps.requires_non_null_content else content, "tool_calls": tool_calls, } def make_tool_call(tool_name, arguments): @@ -198,10 +202,6 @@ def make_tool_call(tool_name, arguments): caps.supports_tool_calls = tool_call_renders_str_arguments or tool_call_renders_obj_arguments caps.requires_object_arguments = not tool_call_renders_str_arguments and tool_call_renders_obj_arguments - caps.requires_non_null_content = \ - (user_needle in self.try_raw_render([dummy_user_msg, {"role": "assistant", "content": ''}])) \ - and (user_needle not in self.try_raw_render([dummy_user_msg, {"role": "assistant", "content": None}])) - if caps.supports_tool_calls: dummy_args = dummy_args_obj if caps.requires_object_arguments else json.dumps(dummy_args_obj) tc1 = make_tool_call("test_tool1", dummy_args) @@ -232,7 +232,7 @@ def make_tool_call(tool_name, arguments): args = {"arg1": "some_value"} tool_call_msg = { "role": "assistant", - "content": None, + "content": "" if caps.requires_non_null_content else None, "tool_calls": [ { "id": "call_1___", diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 491eca0..14e789b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -285,7 +285,6 @@ set(MODEL_IDS Qwen/Qwen2.5-VL-3B-Instruct Qwen/Qwen2.5-VL-72B-Instruct Qwen/Qwen2.5-VL-7B-Instruct - Qwen/QwQ-32B Qwen/QwQ-32B-Preview rubenroy/Zurich-14B-GCv2-5m rubenroy/Zurich-7B-GCv2-5m @@ -323,6 +322,7 @@ set(MODEL_IDS Qwen/Qwen3-4B # Broken, TODO: + # Qwen/QwQ-32B # ai21labs/AI21-Jamba-1.5-Large # https://github.com/google/minja/issues/8 # Almawave/Velvet-14B # deepseek-ai/DeepSeek-R1 diff --git a/tests/test-capabilities.cpp b/tests/test-capabilities.cpp index 53e3999..88968ce 100644 --- a/tests/test-capabilities.cpp +++ b/tests/test-capabilities.cpp @@ -75,6 +75,18 @@ TEST(CapabilitiesTest, Gemma7b) { EXPECT_FALSE(caps.requires_typed_content); } +TEST(CapabilitiesTest, QwQ32B) { + auto caps = get_caps("tests/Qwen-QwQ-32B.jinja"); + EXPECT_TRUE(caps.supports_system_role); + EXPECT_TRUE(caps.supports_tools); + EXPECT_TRUE(caps.supports_tool_calls); + EXPECT_FALSE(caps.supports_tool_responses); + EXPECT_TRUE(caps.supports_parallel_tool_calls); + EXPECT_TRUE(caps.requires_object_arguments); + // EXPECT_TRUE(caps.requires_non_null_content); + EXPECT_FALSE(caps.requires_typed_content); +} + #ifndef _WIN32 TEST(CapabilitiesTest, DeepSeekR1Distill) { @@ -141,7 +153,7 @@ TEST(CapabilitiesTest, MetaLlama3_3_70BInstruct) { TEST(CapabilitiesTest, MiniMaxAIText01) { auto caps = get_caps("tests/MiniMaxAI-MiniMax-Text-01.jinja"); EXPECT_TRUE(caps.supports_system_role); - EXPECT_FALSE(caps.supports_tools); + EXPECT_TRUE(caps.supports_tools); EXPECT_FALSE(caps.supports_tool_calls); EXPECT_FALSE(caps.supports_tool_responses); EXPECT_FALSE(caps.supports_parallel_tool_calls);