diff --git a/CMakeLists.txt b/CMakeLists.txt index a36b85163bb8134cde791a24e45cf8ba62cf091c..67a0f954166d892b241c9cd5b4e8a5e9a00eda05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,9 @@ add_executable(kylin-ai-business-framework-service src/main.cpp src/datamanagement/segmenttokenizer.cpp src/datamanagement/segmenttokenizer.h src/utils/vectordb/vectordb.cpp - src/utils/vectordb/vectordb.h) + src/utils/vectordb/vectordb.h + src/utils/utils.cpp + src/utils/utils.h) find_package(PkgConfig REQUIRED) @@ -59,6 +61,7 @@ pkg_check_modules(opencv REQUIRED IMPORTED_TARGET opencv4) pkg_check_modules(onnxruntime REQUIRED IMPORTED_TARGET libonnxruntime) pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-unix-2.0) pkg_check_modules(jsoncpp REQUIRED IMPORTED_TARGET jsoncpp) +pkg_check_modules(UUID REQUIRED IMPORTED_TARGET uuid) include_directories( ./src @@ -74,6 +77,7 @@ target_link_libraries(kylin-ai-business-framework-service PkgConfig::poppler PkgConfig::opencv PkgConfig::onnxruntime + PkgConfig::UUID ) set(FRAMEWORK_PATH /usr/share/kylin-ai-business-framework) diff --git a/debian/control b/debian/control index a0a99b3472bd21c5acb5f10aac0e0603721e7db9..10b0a4a87d47abd9f8ac0c4c4927fd56727533a6 100644 --- a/debian/control +++ b/debian/control @@ -13,7 +13,7 @@ Build-Depends: debhelper-compat (= 12), Standards-Version: 4.4.1 Homepage: https://www.ukui.org/ Package: kylin-ai-business-framework-service -Architecture: any +Architecture: amd64 Depends: ${misc:Depends}, ${shlibs:Depends}, onnxruntime, python3-venv, diff --git a/src/datamanagement/datamanagementdatabase.cpp b/src/datamanagement/datamanagementdatabase.cpp index 3cb70ddab7c709c0d87b6701c549e31669b838f0..828ef5d8d2f661d74a758e21dde83d557ec6dc15 100644 --- a/src/datamanagement/datamanagementdatabase.cpp +++ b/src/datamanagement/datamanagementdatabase.cpp @@ -1,5 +1,6 @@ #include "datamanagementdatabase.h" #include "utils/vectordb/vectordb.h" +#include "utils/utils.h" #include #include @@ -18,24 +19,6 @@ std::string getVectorDatabasePath() { return vector_database_path; } -std::string generateUUID() { - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_int_distribution<> dis(0, 15); - - std::stringstream ss; - ss << std::hex; - - for (int i = 0; i < 32; ++i) { - if (i == 8 || i == 12 || i == 16 || i == 20) { - ss << "-"; - } - ss << dis(gen); - } - - return ss.str(); -} - std::vector convertFloatToDouble(const std::vector& floatVec) { std::vector doubleVec; doubleVec.reserve(floatVec.size()); // 预留空间以避免不必要的重新分配 @@ -273,7 +256,7 @@ void DataManagementDatabase::checkAndCreateCollections(const std::vector DataManagementDatabase::getVectorDatasFromFileInfo(const std::vector datas; for (auto const& vector : fileinfo.vectors) { VectorData vectorData; - vectorData.id = generateUUID(); + vectorData.id = utils::generateUUID(); vectorData.embedding = convertFloatToDouble(vector); vectorData.metadata.insert({"sourceId", sourceId}); datas.emplace_back(std::move(vectorData)); diff --git a/src/embeddingtaskmanager/baseembeddingservice.cpp b/src/embeddingtaskmanager/baseembeddingservice.cpp index 05ce985aa9ef0c257ff4efc76bb378a154ba0865..655bb4e5a0dd3a905fc5ed4cc3e966860b173e62 100644 --- a/src/embeddingtaskmanager/baseembeddingservice.cpp +++ b/src/embeddingtaskmanager/baseembeddingservice.cpp @@ -45,10 +45,10 @@ std::vector BaseEmbeddingService::getTaskResult(TaskID id) // std::cout << "Find result of task " << id << " in result list" << std::endl; std::vector result; - for (const auto& res : results_) { - if (res.first == id) { - result = res.second; - results_.remove(res); + for (auto begin = results_.begin(); begin != results_.end(); ++begin) { + if (begin->first == id) { + result = begin->second; + results_.erase(begin); break; } } diff --git a/src/embeddingtaskmanager/embeddingtask.cpp b/src/embeddingtaskmanager/embeddingtask.cpp index 8a49e8f192c209e917eab456a47ca1311b6d54b0..442dc415edca01e1cd0502ec2feb9bcd8114b8ab 100644 --- a/src/embeddingtaskmanager/embeddingtask.cpp +++ b/src/embeddingtaskmanager/embeddingtask.cpp @@ -1,4 +1,5 @@ #include "embeddingtask.h" +#include "utils/utils.h" #include #include @@ -6,14 +7,14 @@ EmbeddingTask::EmbeddingTask(const std::string &textData, EmbeddingDataType type, TaskPriority priority) : taskData_(encodeText(textData)) , taskType_(type) - , taskId_(generateUniqueId()) + , taskId_(utils::generateUUID()) , priority_(priority) { } EmbeddingTask::EmbeddingTask(const std::vector &data, EmbeddingDataType type, TaskPriority priority) : taskData_(data) , taskType_(type) - , taskId_(generateUniqueId()) + , taskId_(utils::generateUUID()) , priority_(priority) {} @@ -27,22 +28,6 @@ bool EmbeddingTask::operator <(const EmbeddingTask& other) const return priority() < other.priority(); } -long long EmbeddingTask::generateUniqueId() const -{ - // 获取当前时间戳 - auto now = std::chrono::system_clock::now(); - auto ms = std::chrono::duration_cast(now.time_since_epoch()).count(); - - // 生成随机数 - std::random_device rd; - std::mt19937 gen(rd()); - std::uniform_int_distribution distribution(1, 1000); - long long random = distribution(gen); - - // 将时间戳和随机数结合生成唯一id - return ms * 1000 + random; -} - std::vector EmbeddingTask::encodeText(const std::string &data) const { std::vector encodedData; diff --git a/src/embeddingtaskmanager/embeddingtask.h b/src/embeddingtaskmanager/embeddingtask.h index 3ae85a41bfb6aa0e1463eb7117113b32e58a8dd3..950dc526dec278aa2b8c53ebf0f3541ba0be35ff 100644 --- a/src/embeddingtaskmanager/embeddingtask.h +++ b/src/embeddingtaskmanager/embeddingtask.h @@ -4,7 +4,7 @@ #include #include -typedef int TaskID; +typedef std::string TaskID; class EmbeddingTask { public: @@ -34,7 +34,6 @@ public: bool operator<(const EmbeddingTask& other) const; private: - long long generateUniqueId() const; std::vector encodeText(const std::string& data) const; std::string decodeText(const std::vector& data) const; diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp new file mode 100644 index 0000000000000000000000000000000000000000..abc3f9e2e78be5c6602b8c207537c8472d64ff94 --- /dev/null +++ b/src/utils/utils.cpp @@ -0,0 +1,19 @@ +#include "utils.h" + +#include + +namespace utils { + +std::string generateUUID() +{ + uuid_t uuid; + char uuid_str[37]; + + uuid_generate_random(uuid); + uuid_unparse(uuid, uuid_str); + std::string id = uuid_str; + + return id; +} + +} diff --git a/src/utils/utils.h b/src/utils/utils.h new file mode 100644 index 0000000000000000000000000000000000000000..8a44b74a099b0693137b04264081fd950c4544b1 --- /dev/null +++ b/src/utils/utils.h @@ -0,0 +1,12 @@ +#ifndef UTILS_H +#define UTILS_H +#include +namespace utils { + +std::string generateUUID(); + + +} + + +#endif // UTILS_H