From 57c1fb42e4e8852a08fcfde2914d74f235f97841 Mon Sep 17 00:00:00 2001 From: sangjanai Date: Fri, 14 Feb 2025 12:08:42 +0700 Subject: [PATCH 1/3] feat: add inja example --- engine/CMakeLists.txt | 4 ++ engine/examples/inja/CMakeLists.txt | 66 +++++++++++++++++++++++++++++ engine/examples/inja/data.txt | 17 ++++++++ engine/examples/inja/main.cc | 45 ++++++++++++++++++++ engine/examples/inja/template.txt | 10 +++++ 5 files changed, 142 insertions(+) create mode 100644 engine/examples/inja/CMakeLists.txt create mode 100644 engine/examples/inja/data.txt create mode 100644 engine/examples/inja/main.cc create mode 100644 engine/examples/inja/template.txt diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 6a8d441a0..2e499bc67 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -62,12 +62,16 @@ add_compile_definitions(CORTEX_CPP_VERSION="${CORTEX_CPP_VERSION}") add_compile_definitions(CORTEX_CONFIG_FILE_PATH="${CORTEX_CONFIG_FILE_PATH}") option(CMAKE_BUILD_TEST "Enable testing" OFF) +option(CMAKE_BUILD_INJA_TEST "Enable inja example" OFF) if(CMAKE_BUILD_TEST) add_subdirectory(test) endif() add_subdirectory(cli) +if(CMAKE_BUILD_INJA_TEST) + add_subdirectory(examples/inja) +endif() find_package(jsoncpp CONFIG REQUIRED) diff --git a/engine/examples/inja/CMakeLists.txt b/engine/examples/inja/CMakeLists.txt new file mode 100644 index 000000000..e89853cb7 --- /dev/null +++ b/engine/examples/inja/CMakeLists.txt @@ -0,0 +1,66 @@ +project(inja-test C CXX) + +include(CheckIncludeFileCXX) + +check_include_file_cxx(any HAS_ANY) +check_include_file_cxx(string_view HAS_STRING_VIEW) +check_include_file_cxx(coroutine HAS_COROUTINE) +if(HAS_ANY + AND HAS_STRING_VIEW + AND HAS_COROUTINE) + set(CMAKE_CXX_STANDARD 20) +elseif(HAS_ANY AND HAS_STRING_VIEW) + set(CMAKE_CXX_STANDARD 17) +else() + set(CMAKE_CXX_STANDARD 14) +endif() + +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(OPENSSL_USE_STATIC_LIBS TRUE) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if(MSVC) + add_compile_options( + $<$:/MT> #---------| + $<$:/MTd> #---|-- Statically link the runtime libraries + $<$:/MT> #--| + ) + + add_compile_options(/utf-8) + add_definitions(-DUNICODE -D_UNICODE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DUNICODE /D_UNICODE") +endif() + +find_package(jsoncpp CONFIG REQUIRED) +find_package(Trantor CONFIG REQUIRED) +set(TARGET_NAME ${PROJECT_NAME}) + +add_executable(${TARGET_NAME} main.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../extensions/template_renderer.cc + ) + +target_link_libraries(${TARGET_NAME} PRIVATE JsonCpp::JsonCpp) +target_link_libraries(${TARGET_NAME} PRIVATE Trantor::Trantor) + +# ############################################################################## + +if(CMAKE_CXX_STANDARD LESS 17) + # With C++14, use boost to support any and std::string_view + message(STATUS "use c++14") + find_package(Boost 1.61.0 REQUIRED) + target_include_directories(${TARGET_NAME} PRIVATE ${Boost_INCLUDE_DIRS}) +elseif(CMAKE_CXX_STANDARD LESS 20) + message(STATUS "use c++17") +else() + message(STATUS "use c++20") +endif() + +target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../..) +target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +set_target_properties(${TARGET_NAME} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} +) diff --git a/engine/examples/inja/data.txt b/engine/examples/inja/data.txt new file mode 100644 index 000000000..58ae7f78a --- /dev/null +++ b/engine/examples/inja/data.txt @@ -0,0 +1,17 @@ +{ + "choices": [ + { + "delta": { + "content": " questions" + }, + "finish_reason": null, + "index": 0 + } + ], + "created": 1735372587, + "id": "", + "model": "o1-preview", + "object": "chat.completion.chunk", + "stream": true, + "system_fingerprint": "fp_1ddf0263de" +} \ No newline at end of file diff --git a/engine/examples/inja/main.cc b/engine/examples/inja/main.cc new file mode 100644 index 000000000..4e0e9b1fe --- /dev/null +++ b/engine/examples/inja/main.cc @@ -0,0 +1,45 @@ +#include "extensions/template_renderer.h" +#include "utils/json_helper.h" + +void print_help() { + std::cout << "Usage: \ninja-test [options]\n\n"; + std::cout << "Options:\n"; + std::cout << " --template Path to template file\n"; + std::cout << " --data Path to data file\n"; + + exit(0); +} + +int main(int argc, char* argv[]) { + std::filesystem::path template_path; + std::filesystem::path data_path; + for (int i = 0; i < argc; i++) { + if (strcmp(argv[i], "--template") == 0) { + template_path = argv[i + 1]; + } else if (strcmp(argv[i], "--data") == 0) { + data_path = argv[i + 1]; + } else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { + print_help(); + } + } + + auto get_str = [](const std::filesystem::path& p) { + std::ifstream ifs(p); + std::stringstream buffer; + buffer << ifs.rdbuf(); + return buffer.str(); + }; + + std::string tpl = get_str(template_path); + std::string message = get_str(data_path); + auto data = json_helper::ParseJsonString(message); + + extensions::TemplateRenderer rdr; + auto res = rdr.Render(tpl, data); + std::cout << std::endl; + std::cout << "Result: " << std::endl; + std::cout << res << std::endl; + std::cout << std::endl; + + return 0; +} \ No newline at end of file diff --git a/engine/examples/inja/template.txt b/engine/examples/inja/template.txt new file mode 100644 index 000000000..421f03633 --- /dev/null +++ b/engine/examples/inja/template.txt @@ -0,0 +1,10 @@ +{ + {% set first = true %} + {% for key, value in input_request %} + {% if key == "choices" or key == "created" or key == "model" or key == "service_tier" or key == "system_fingerprint" or key == "stream" or key == "object" or key == "usage" %} + {% if not first %},{% endif %} + "{{ key }}": {{ tojson(value) }} + {% set first = false %} + {% endif %} + {% endfor %} +} From f65eea30717088e5aeacc373fe0185206aeacddf Mon Sep 17 00:00:00 2001 From: sangjanai Date: Fri, 14 Feb 2025 13:04:04 +0700 Subject: [PATCH 2/3] chore: add README.md --- engine/examples/inja/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 engine/examples/inja/README.md diff --git a/engine/examples/inja/README.md b/engine/examples/inja/README.md new file mode 100644 index 000000000..bd0c33370 --- /dev/null +++ b/engine/examples/inja/README.md @@ -0,0 +1,5 @@ +Build cortex with `CMAKE_BUILD_INJA_TEST=ON` + +```bash title="Run inja-test" +./inja-test --template path_to_template_file --data path_to_data_file +``` \ No newline at end of file From 9ceea6c2922a47cacfcde45c17d50c444203d111 Mon Sep 17 00:00:00 2001 From: sangjanai Date: Fri, 14 Feb 2025 14:27:12 +0700 Subject: [PATCH 3/3] fix: temp comment out sync --- engine/services/model_source_service.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engine/services/model_source_service.cc b/engine/services/model_source_service.cc index aaf8b469b..e6572be5f 100644 --- a/engine/services/model_source_service.cc +++ b/engine/services/model_source_service.cc @@ -64,7 +64,8 @@ std::vector ParseJsonString(const std::string& json_str) { ModelSourceService::ModelSourceService( std::shared_ptr db_service) : db_service_(db_service) { - sync_db_thread_ = std::thread(&ModelSourceService::SyncModelSource, this); + // TODO(sang) temporariy comment out because of race condition bug + // sync_db_thread_ = std::thread(&ModelSourceService::SyncModelSource, this); running_ = true; }