[Service/Model] define new API
authorJaeyun Jung <jy1210.jung@samsung.com>
Fri, 24 Feb 2023 05:27:24 +0000 (14:27 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Mon, 20 Mar 2023 02:03:23 +0000 (11:03 +0900)
Define new function and info handle for machine learning models.

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
c/include/ml-api-common.h
c/include/ml-api-service.h
c/src/ml-api-service-agent-client.c
tests/capi/unittest_capi_service_agent_client.cc

index 77de13f..6b1feee 100644 (file)
@@ -462,7 +462,21 @@ int ml_option_destroy (ml_option_h option);
  * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
  * @retval #ML_ERROR_INVALID_PARAMETER Fail. The parameter is invalid.
  */
-int ml_option_set (ml_option_h option, const char* key, void *value, ml_data_destroy_cb destroy);
+int ml_option_set (ml_option_h option, const char *key, void *value, ml_data_destroy_cb destroy);
+
+/**
+ * @brief Gets a value of key in ml-option instance.
+ * @details This returns the pointer of memory in the handle. Do not deallocate the returned value. If you modify the returned memory (value), the contents of value is updated.
+ * @since_tizen 7.5
+ * @param[in] option The handle of ml-option.
+ * @param[in] key The key to get the corresponding value.
+ * @param[out] value The value of the key.
+ * @return @c 0 on success. Otherwise a negative error value.
+ * @retval #ML_ERROR_NONE Successful.
+ * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
+ * @retval #ML_ERROR_INVALID_PARAMETER Fail. The parameter is invalid.
+ */
+int ml_option_get (ml_option_h option, const char *key, void **value);
 
 /**
  * @}
index 70d6857..4fb3138 100644 (file)
@@ -209,9 +209,10 @@ int ml_service_query_create (ml_option_h option, ml_service_h *handle);
 /**
  * @brief Requests the query service to process the @a input and produce an @a output.
  * @since_tizen 7.0
+ * @remarks If the function succeeds, the @a output should be released using ml_tensors_data_destroy().
  * @param[in] handle The query service handle created by ml_service_query_create().
  * @param[in] input The handle of input tensors.
- * @param[out] output The handle of output tensors. The caller is responsible for freeing the allocated data with ml_tensors_data_destroy().
+ * @param[out] output The handle of output tensors.
  * @return 0 on success. Otherwise a negative error value.
  * @retval #ML_ERROR_NONE Successful.
  * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
@@ -224,9 +225,112 @@ int ml_service_query_create (ml_option_h option, ml_service_h *handle);
 int ml_service_query_request (ml_service_h handle, const ml_tensors_data_h input, ml_tensors_data_h *output);
 
 /**
- * @brief TBU
+ * @brief Registers new information of a neural network model.
+ * @since_tizen 7.5
+ * @remarks Only one model can be activated with given @a name. If same name is already registered in machine learning service, this returns no error and old model will be deactivated when the flag @a activate is true.
+ * @remarks %http://tizen.org/privilege/mediastorage is needed if model file is relevant to media storage.
+ * @remarks %http://tizen.org/privilege/externalstorage is needed if model file is relevant to external storage.
+ * @param[in] name The unique name to indicate the model.
+ * @param[in] path The path to neural network model.
+ * @param[in] activate The flag to set the model to be activated.
+ * @param[in] description Nullable, description for neural network model.
+ * @param[out] version The version of registered model.
+ * @return 0 on success. Otherwise a negative error value.
+ * @retval #ML_ERROR_NONE Successful.
+ * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
+ * @retval #ML_ERROR_PERMISSION_DENIED The application does not have the privilege to access to the storage.
+ * @retval #ML_ERROR_INVALID_PARAMETER Given parameter is invalid.
+ * @retval #ML_ERROR_IO_ERROR The operation of DB or filesystem has failed.
+ */
+int ml_service_model_register (const char *name, const char *path, const bool activate, const char *description, unsigned int *version);
+
+/**
+ * @brief Updates the description of neural network model with given @a name and @a version.
+ * @since_tizen 7.5
+ * @param[in] name The unique name to indicate the model.
+ * @param[in] version The version of registered model.
+ * @param[in] description The description for neural network model.
+ * @return 0 on success. Otherwise a negative error value.
+ * @retval #ML_ERROR_NONE Successful.
+ * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
+ * @retval #ML_ERROR_INVALID_PARAMETER Given parameter is invalid.
+ * @retval #ML_ERROR_IO_ERROR The operation of DB or filesystem has failed.
+ */
+int ml_service_model_update_description (const char *name, const unsigned int version, const char *description);
+
+/**
+ * @brief Activates a neural network model with given @a name and @a version.
+ * @since_tizen 7.5
+ * @param[in] name The unique name to indicate the model.
+ * @param[in] version The version of registered model.
+ * @return 0 on success. Otherwise a negative error value.
+ * @retval #ML_ERROR_NONE Successful.
+ * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
+ * @retval #ML_ERROR_INVALID_PARAMETER Given parameter is invalid.
+ * @retval #ML_ERROR_IO_ERROR The operation of DB or filesystem has failed.
+ */
+int ml_service_model_activate (const char *name, const unsigned int version);
+
+/**
+ * @brief Gets the information of neural network model with given @a name and @a version.
+ * @since_tizen 7.5
+ * @remarks If the function succeeds, the @a info should be released using ml_option_destroy().
+ * @param[in] name The unique name to indicate the model.
+ * @param[in] version The version of registered model.
+ * @param[out] info The handle of model.
+ * @return 0 on success. Otherwise a negative error value.
+ * @retval #ML_ERROR_NONE Successful.
+ * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
+ * @retval #ML_ERROR_INVALID_PARAMETER Given parameter is invalid.
+ * @retval #ML_ERROR_IO_ERROR The operation of DB or filesystem has failed.
+ * @retval #ML_ERROR_OUT_OF_MEMORY Failed to allocate required memory.
+ */
+int ml_service_model_get (const char *name, const unsigned int version, ml_option_h *info);
+
+/**
+ * @brief Gets the information of activated neural network model with given @a name.
+ * @since_tizen 7.5
+ * @remarks If the function succeeds, the @a info should be released using ml_option_destroy().
+ * @param[in] name The unique name to indicate the model.
+ * @param[out] info The handle of activated model.
+ * @return 0 on success. Otherwise a negative error value.
+ * @retval #ML_ERROR_NONE Successful.
+ * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
+ * @retval #ML_ERROR_INVALID_PARAMETER Given parameter is invalid.
+ * @retval #ML_ERROR_IO_ERROR The operation of DB or filesystem has failed.
+ * @retval #ML_ERROR_OUT_OF_MEMORY Failed to allocate required memory.
+ */
+int ml_service_model_get_activated (const char *name, ml_option_h *info);
+
+/**
+ * @brief Gets the list of neural network model with given @a name.
+ * @since_tizen 7.5
+ * @remarks If the function succeeds, each handle in @a info_list should be released using ml_option_destroy().
+ * @param[in] name The unique name to indicate the model.
+ * @param[out] info_list The handles of registered model.
+ * @param[out] num Total number of registered model.
+ * @return 0 on success. Otherwise a negative error value.
+ * @retval #ML_ERROR_NONE Successful.
+ * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
+ * @retval #ML_ERROR_INVALID_PARAMETER Given parameter is invalid.
+ * @retval #ML_ERROR_IO_ERROR The operation of DB or filesystem has failed.
+ * @retval #ML_ERROR_OUT_OF_MEMORY Failed to allocate required memory.
+ */
+int ml_service_model_get_all (const char *name, ml_option_h *info_list[], unsigned int *num);
+
+/**
+ * @brief Deletes a model information with given @a name and @a version from machine learning service.
+ * @since_tizen 7.5
+ * @remarks This does not remove the model file from file system. If @a version is 0, machine learning service will delete all information with given @a name.
+ * @param[in] name The unique name to indicate the model.
+ * @param[in] version The version of registered model.
+ * @return 0 on success. Otherwise a negative error value.
+ * @retval #ML_ERROR_NONE Successful.
+ * @retval #ML_ERROR_NOT_SUPPORTED Not supported.
+ * @retval #ML_ERROR_INVALID_PARAMETER Given parameter is invalid.
+ * @retval #ML_ERROR_IO_ERROR The operation of DB or filesystem has failed.
  */
-int ml_service_model_register (const char *key, const char *model_path, unsigned int *version);
+int ml_service_model_delete (const char *name, const unsigned int version);
 
 /**
  * @}
index ac0bd1e..2c71f75 100644 (file)
@@ -340,7 +340,7 @@ ml_service_get_pipeline_state (ml_service_h h, ml_pipeline_state_e * state)
  */
 int
 ml_service_model_register (const char *name, const char *path,
-    unsigned int *version)
+    const bool activate, const char *description, unsigned int *version)
 {
   int ret = ML_ERROR_NONE;
   MachinelearningServiceModel *mlsm;
index bdbe553..98aabc9 100644 (file)
@@ -737,7 +737,7 @@ TEST_F (MLServiceAgentTest, model_00)
       "mobilenet_v1_1.0_224_quant.tflite", NULL);
   ASSERT_TRUE (g_file_test (test_model, G_FILE_TEST_EXISTS));
 
-  status = ml_service_model_register (key, test_model, &version);
+  status = ml_service_model_register (key, test_model, false, nullptr, &version);
   EXPECT_EQ (ML_ERROR_NONE, status);
   EXPECT_EQ (1U, version);