# KWS Plug-in
1. Add the API of the KWS plug-in to the **//foundation/ai/engine/services/server/plugin** directory. This API is used to call AI capabilities. The following code snippet is an example API implementation of the KWS plug-in. The reference code is available at the **//foundation/ai/engine/services/server/plugin/asr/keyword\_spotting** directory.
```
#include "plugin/i_plugin.h
class KWSPlugin : public IPlugin {
public:
KWSPlugin();
~KWSPlugin();
const long long GetVersion() const override;
const char* GetName() const override;
const char* GetInferMode() const override;
int32_t Prepare(long long transactionId, const DataInfo &inputInfo, DataInfo &outputInfo) override;
int32_t SetOption(int optionType, const DataInfo &inputInfo) override;
int32_t GetOption(int optionType, const DataInfo &inputInfo, DataInfo &outputInfo) override;
int32_t SyncProcess(IRequest *request, IResponse *&response) override;
int32_t AsyncProcess(IRequest *request, IPluginCallback*callback) override;
int32_t Release(bool isFullUnload, long long transactionId, const DataInfo &inputInfo) override;
};
```
The preceding code implements the **IPlugin** API provided by the server. [Table 1](#table567211582104) shows the mapping between the client APIs and the plug-in APIs.
**Table 1** Mapping between the client APIs and the plug-in APIs
Client API
|
Plug-in API
|
Description
|
AieClientPrepare
|
Prepare
|
Initializes the inference algorithm plug-in. For KWS, this API loads the KWS model from the fixed location (/sdcard/wenwen_inst.wk) to the memory.
|
AieClientSyncProcess
|
SyncProcess
|
Executes the inference algorithm synchronously. For KWS, this API synchronously executes the audio inference algorithm to determine whether the specified wakeup keyword exists in the audio.
|
AieClientAsyncProcess
|
AsyncProcess
|
Executes the inference algorithm asynchronously. Currently, this API is not used in KWS. However, you can implement the API based on your use case.
|
AieClientSetOption
|
SetOption
|
Sets algorithm-related configuration items, such as the confidence threshold and delay. Currently, this API is not used in KWS. However, you can implement the API based on your use case.
|
AieClientGetOption
|
GetOption
|
Obtains algorithm-related configuration items. For KWS, this API can obtain the input and output scale of the KWS model. The input scale is the MFCC feature (fixed value: 4000) required by the KWS model, and the output scale is the confidence (fixed value: 2) of the result.
|
AieClientRelease
|
Release
|
Releases the algorithm model. For KWS, this API releases the specified algorithm model and clears the dynamic memory in the feature processor.
|
Note:
1. The **AieClientInit** and **AieClientDestroy** APIs are used to connect to and disconnect from the server, respectively. They are not called in the plug-in algorithm and therefore do not need to be defined in the plug-in.
2. The KWS plug-in needs to use the **PLUGIN\_INTERFACE\_IMPL** statement to expose the function pointer. Otherwise, the plug-in cannot be properly loaded.
```
PLUGIN_INTERFACE_IMPL(KWSPlugin);
```