Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 9c3be5c

Browse files
committed
feat: add sample code for unit tests
1 parent 03a5a4c commit 9c3be5c

File tree

8 files changed

+100
-4
lines changed

8 files changed

+100
-4
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ add_compile_definitions(NITRO_VERSION="${NITRO_VERSION}")
4949

5050
add_subdirectory(llama.cpp)
5151
add_subdirectory(whisper.cpp)
52+
add_subdirectory(test)
5253

5354
add_executable(${PROJECT_NAME} main.cc)
5455

@@ -93,4 +94,4 @@ target_sources(${PROJECT_NAME} PRIVATE ${CTL_SRC} ${COMMON_SRC} ${CONTEXT_SRC})
9394
# ${FILTER_SRC} ${PLUGIN_SRC} ${MODEL_SRC})
9495
# ##############################################################################
9596
# uncomment the following line for dynamically loading views set_property(TARGET
96-
# ${PROJECT_NAME} PROPERTY ENABLE_EXPORTS ON)
97+
# ${PROJECT_NAME} PROPERTY ENABLE_EXPORTS ON)

controllers/llamaCPP.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,8 +589,10 @@ void llamaCPP::LoadModel(
589589

590590
bool llamaCPP::LoadModelImpl(std::shared_ptr<Json::Value> jsonBody) {
591591
gpt_params params;
592+
LOG_INFO << "Start loading model";
592593
// By default will setting based on number of handlers
593594
if (jsonBody) {
595+
LOG_DEBUG << "Start parsing jsonBody";
594596
if (!jsonBody->operator[]("mmproj").isNull()) {
595597
LOG_INFO << "MMPROJ FILE detected, multi-model enabled!";
596598
params.mmproj = jsonBody->operator[]("mmproj").asString();

models/chat_completion_request.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ namespace inferences {
55
struct ChatCompletionRequest {
66
bool stream = false;
77
int max_tokens = 500;
8-
float top_p = 0.95;
9-
float temperature = 0.8;
8+
float top_p = 0.95f;
9+
float temperature = 0.8f;
1010
float frequency_penalty = 0;
1111
float presence_penalty = 0;
1212
Json::Value stop = Json::Value(Json::arrayValue);

nitro_deps/CMakeLists.txt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,23 @@ ExternalProject_Add(
7979
-DCMAKE_INSTALL_PREFIX=${THIRD_PARTY_INSTALL_PATH}
8080
)
8181

82-
# Fix trantor cmakelists to link c-ares on Windows
82+
# Download and install GoogleTest
83+
ExternalProject_Add(
84+
gtest
85+
GIT_REPOSITORY https://github.com/google/googletest
86+
GIT_TAG v1.14.0
87+
CMAKE_ARGS
88+
-DCMAKE_BUILD_TYPE=release
89+
-DCMAKE_PREFIX_PATH=${THIRD_PARTY_INSTALL_PATH}
90+
-DCMAKE_INSTALL_PREFIX=${THIRD_PARTY_INSTALL_PATH}
91+
)
92+
93+
8394
if(WIN32)
95+
# Fix dynamic link for gtest
96+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
97+
98+
# Fix trantor cmakelists to link c-ares on Windows
8499
set(TRANTOR_CMAKE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../build_deps/nitro_deps/drogon-prefix/src/drogon/trantor/CMakeLists.txt)
85100
ExternalProject_Add_Step(drogon trantor_custom_target
86101
COMMAND ${CMAKE_COMMAND} -E echo add_definitions(-DCARES_STATICLIB) >> ${TRANTOR_CMAKE_FILE}

test/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
add_subdirectory(models)

test/models/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
file(GLOB SRCS *.cc)
2+
project(test-models)
3+
4+
add_executable(${PROJECT_NAME} ${SRCS})
5+
6+
find_package(Drogon CONFIG REQUIRED)
7+
find_package(GTest CONFIG REQUIRED)
8+
9+
target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon GTest::gtest GTest::gmock
10+
${CMAKE_THREAD_LIBS_INIT})
11+
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../)
12+
13+
add_test(NAME ${PROJECT_NAME}
14+
COMMAND ${PROJECT_NAME})

test/models/main.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#include "gtest/gtest.h"
2+
#include <drogon/HttpAppFramework.h>
3+
#include <drogon/drogon.h>
4+
5+
int main(int argc, char **argv) {
6+
::testing::InitGoogleTest(&argc, argv);
7+
int ret = RUN_ALL_TESTS();
8+
return ret;
9+
}

test/models/test_models.cc

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include "gtest/gtest.h"
2+
#include "models/chat_completion_request.h"
3+
4+
using inferences::ChatCompletionRequest;
5+
6+
class ModelTest : public ::testing::Test {
7+
};
8+
9+
10+
TEST_F(ModelTest, should_parse_request) {
11+
{
12+
Json::Value data;
13+
auto req = drogon::HttpRequest::newHttpJsonRequest(data);
14+
15+
auto res =
16+
drogon::fromRequest<inferences::ChatCompletionRequest>(*req.get());
17+
18+
EXPECT_EQ(res.stream, false);
19+
EXPECT_EQ(res.max_tokens, 500);
20+
EXPECT_EQ(res.top_p, 0.95f);
21+
EXPECT_EQ(res.temperature, 0.8f);
22+
EXPECT_EQ(res.frequency_penalty, 0);
23+
EXPECT_EQ(res.presence_penalty, 0);
24+
EXPECT_EQ(res.stop, Json::Value{});
25+
EXPECT_EQ(res.messages, Json::Value{});
26+
}
27+
28+
{
29+
Json::Value data;
30+
data["stream"] = true;
31+
data["max_tokens"] = 400;
32+
data["top_p"] = 0.8;
33+
data["temperature"] = 0.7;
34+
data["frequency_penalty"] = 0.1;
35+
data["presence_penalty"] = 0.2;
36+
data["messages"] = "message";
37+
data["stop"] = "stop";
38+
39+
auto req = drogon::HttpRequest::newHttpJsonRequest(data);
40+
41+
auto res =
42+
drogon::fromRequest<inferences::ChatCompletionRequest>(*req.get());
43+
44+
EXPECT_EQ(res.stream, true);
45+
EXPECT_EQ(res.max_tokens, 400);
46+
EXPECT_EQ(res.top_p, 0.8f);
47+
EXPECT_EQ(res.temperature, 0.7f);
48+
EXPECT_EQ(res.frequency_penalty, 0.1f);
49+
EXPECT_EQ(res.presence_penalty, 0.2f);
50+
EXPECT_EQ(res.stop, Json::Value{"stop"});
51+
EXPECT_EQ(res.messages, Json::Value{"message"});
52+
}
53+
}

0 commit comments

Comments
 (0)