1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 17 #ifndef TEXT_EMBEDDING_NAPI_H 18 #define TEXT_EMBEDDING_NAPI_H 19 20 #include <uv.h> 21 #include <refbase.h> 22 23 #include "i_aip_core_manager.h" 24 #include "i_aip_core_manager_impl.h" 25 #include "napi/native_api.h" 26 #include "napi/native_node_api.h" 27 namespace OHOS { 28 namespace DataIntelligence { 29 class TextEmbeddingNapi { 30 public: 31 TextEmbeddingNapi(); 32 ~TextEmbeddingNapi(); 33 34 static napi_value Init(napi_env env, napi_value exports); 35 static napi_value LoadModel(napi_env env, napi_callback_info info); 36 static napi_value ReleaseModel(napi_env env, napi_callback_info info); 37 static napi_value GetEmbedding(napi_env env, napi_callback_info info); 38 static napi_value SplitText(napi_env env, napi_callback_info info); 39 static napi_value GetTextEmbeddingModel(napi_env env, napi_callback_info info); 40 static napi_value TextConstructor(napi_env env, napi_callback_info info); 41 static void Destructor(napi_env env, void *nativeObject, void *finalize); 42 struct AsyncGetTextEmbeddingModelData { 43 napi_async_work asyncWork; 44 napi_deferred deferred; 45 ModelConfigData config; 46 napi_value res; 47 int32_t ret; 48 }; 49 50 private: 51 static bool LoadAsyncExecution(napi_env env, napi_deferred deferred); 52 static bool ReleaseAsyncExecution(napi_env env, napi_deferred deferred); 53 static bool GetEmbeddingStringAsyncExecution(napi_env env, napi_deferred deferred, std::string str); 54 static bool GetEmbeddingArrayAsyncExecution(napi_env env, napi_deferred deferred, std::vector<std::string> text); 55 static bool SplitTextAsyncExecution(napi_env env, napi_deferred deferred, std::string strArg, int32_t configSize, 56 double configOverlap); 57 static napi_value StringType(napi_env env, napi_value args, napi_value promise, napi_deferred deferred); 58 static napi_value ArrayType(napi_env env, napi_value args, napi_value promise, napi_deferred deferred); 59 static bool ValidateAndDealArrayArgs(napi_env env, napi_value args, std::vector<std::string> &strArr); 60 static bool GetProperties(napi_env env, napi_value args, napi_value &cfgSize, napi_value &cfgOverlap); 61 static void LoadExecuteCB(napi_env env, void *data); 62 static void LoadCompleteCB(napi_env env, napi_status status, void *data); 63 static void ReleaseExecuteCB(napi_env env, void *data); 64 static void ReleaseCompleteCB(napi_env env, napi_status status, void *data); 65 static void GetEmbeddingStringExecuteCB(napi_env env, void *data); 66 static void GetEmbeddingStringCompleteCB(napi_env env, napi_status status, void *data); 67 static void GetEmbeddingArrayExecuteCB(napi_env env, void *data); 68 static void GetEmbeddingArrayCompleteCB(napi_env env, napi_status status, void *data); 69 static void SplitTextExecuteCB(napi_env env, void *data); 70 static void SplitTextCompleteCB(napi_env env, napi_status status, void *data); 71 static bool CreateAsyncTextModelExecution(napi_env env, AsyncGetTextEmbeddingModelData *asyncModelData); 72 static void GetTextEmbeddingModelExecutionCB(napi_env env, void *data); 73 static void GetTextEmbeddingModelCompleteCB(napi_env env, napi_status status, void *data); 74 static bool ParseModelConfig(napi_env env, napi_value *args, size_t argc, ModelConfigData *textModelConfig); 75 76 static thread_local napi_ref sConstructor_; 77 static AipCoreManagerHandle textAipCoreMgrHandle_; 78 napi_env env_; 79 static IAipCoreManager *textAipCoreManager_; 80 }; 81 } // namespace DataIntelligence 82 } // namespace OHOS 83 #endif // TEXT_EMBEDDING_NAPI_H