mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2024-12-24 14:46:39 +00:00
ci : add node addon test and optimize compilation configuration (#468)
* addon: implement node addon call whisper through cpp * addon: modify the license to MIT * addon: remove iostream * addon: rename dir * addon: fix typo * addon: configure cmake to build when cmake-js is used * ci: add addon.node test ci * addon: remove build WHISPER_BUILD_TESTS * addon: update build command * addon: add test * addon: add test file * addon: adapt to compile on Windows * addon: fix typo * addon: reuse jfk.wav Co-authored-by: Georgi Gerganov <ggerganov@gmail.com> * addon: reuse jfk.wav --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
This commit is contained in:
parent
a1c1583cc7
commit
ab1916fc59
48
.github/workflows/examples.yml
vendored
Normal file
48
.github/workflows/examples.yml
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
name: Examples Tests
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- examples/addon.node/**
|
||||||
|
- whisper.h
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- examples/addon.node/**
|
||||||
|
- whisper.h
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
addon_node-ubuntu-latest:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [ 16.x, 18.x ]
|
||||||
|
steps:
|
||||||
|
- name: Clone
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install build-essential
|
||||||
|
sudo apt-get install cmake
|
||||||
|
sudo apt-get install libsdl2-dev
|
||||||
|
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
cache: 'npm'
|
||||||
|
|
||||||
|
- name: Install package.json dependencies
|
||||||
|
working-directory: ./examples/addon.node
|
||||||
|
run: npm install
|
||||||
|
|
||||||
|
- name: Compile addon.node
|
||||||
|
run: npx cmake-js compile -T whisper-addon -B Release
|
||||||
|
|
||||||
|
- name: Download test model
|
||||||
|
run: |
|
||||||
|
bash ./models/download-ggml-model.sh base.en
|
||||||
|
- name: Test
|
||||||
|
run: |
|
||||||
|
cd examples/addon.node
|
||||||
|
npm run test
|
@ -242,7 +242,7 @@ add_subdirectory(bindings)
|
|||||||
# programs, examples and tests
|
# programs, examples and tests
|
||||||
#
|
#
|
||||||
|
|
||||||
if (WHISPER_BUILD_TESTS)
|
if (WHISPER_BUILD_TESTS AND NOT CMAKE_JS_VERSION)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -24,3 +24,8 @@ target_include_directories(${TARGET} PRIVATE ${NODE_ADDON_API_DIR})
|
|||||||
#==================================================================
|
#==================================================================
|
||||||
|
|
||||||
target_link_libraries(${TARGET} ${CMAKE_JS_LIB} whisper ${CMAKE_THREAD_LIBS_INIT})
|
target_link_libraries(${TARGET} ${CMAKE_JS_LIB} whisper ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
|
||||||
|
if(MSVC AND CMAKE_JS_NODELIB_DEF AND CMAKE_JS_NODELIB_TARGET)
|
||||||
|
# Generate node.lib
|
||||||
|
execute_process(COMMAND ${CMAKE_AR} /def:${CMAKE_JS_NODELIB_DEF} /out:${CMAKE_JS_NODELIB_TARGET} ${CMAKE_STATIC_LINKER_FLAGS})
|
||||||
|
endif()
|
||||||
|
@ -14,14 +14,14 @@ npm install
|
|||||||
Make sure it is in the project root directory and compiled with make-js.
|
Make sure it is in the project root directory and compiled with make-js.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
npx cmake-js compile -T whisper-addon
|
npx cmake-js compile -T whisper-addon -B Release
|
||||||
```
|
```
|
||||||
|
|
||||||
For Electron addon and cmake-js options, you can see [cmake-js](https://github.com/cmake-js/cmake-js) and make very few configuration changes.
|
For Electron addon and cmake-js options, you can see [cmake-js](https://github.com/cmake-js/cmake-js) and make very few configuration changes.
|
||||||
|
|
||||||
> Such as appointing special cmake path:
|
> Such as appointing special cmake path:
|
||||||
> ```shell
|
> ```shell
|
||||||
> npx cmake-js compile -c 'xxx/cmake' -T whisper-addon
|
> npx cmake-js compile -c 'xxx/cmake' -T whisper-addon -B Release
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
## Run
|
## Run
|
||||||
|
15
examples/addon.node/__test__/whisper.spec.js
Normal file
15
examples/addon.node/__test__/whisper.spec.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
const path = require('path');
|
||||||
|
const { whisper } = require(path.join(__dirname, '../../../build/Release/whisper-addon'));
|
||||||
|
|
||||||
|
const whisperParamsMock = {
|
||||||
|
language: 'en',
|
||||||
|
model: path.join(__dirname, '../../../models/ggml-base.en.bin'),
|
||||||
|
fname_inp: path.join(__dirname, '../../../samples/jfk.wav'),
|
||||||
|
};
|
||||||
|
|
||||||
|
describe("Run whisper.node", () => {
|
||||||
|
|
||||||
|
test("it should receive a non-empty value", () => {
|
||||||
|
expect(whisper(whisperParamsMock).length).toBeGreaterThan(0);
|
||||||
|
});
|
||||||
|
});
|
@ -1,3 +1,4 @@
|
|||||||
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -398,9 +399,9 @@ Napi::Object whisper(const Napi::CallbackInfo& info) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Napi::Object res = Napi::Array::New(env, result.size());
|
Napi::Object res = Napi::Array::New(env, result.size());
|
||||||
for (u_int32_t i = 0; i < result.size(); ++i) {
|
for (uint64_t i = 0; i < result.size(); ++i) {
|
||||||
Napi::Object tmp = Napi::Array::New(env, 3);
|
Napi::Object tmp = Napi::Array::New(env, 3);
|
||||||
for (u_int32_t j = 0; j < 3; ++j) {
|
for (uint64_t j = 0; j < 3; ++j) {
|
||||||
tmp[j] = Napi::String::New(env, result[i][j]);
|
tmp[j] = Napi::String::New(env, result[i][j]);
|
||||||
}
|
}
|
||||||
res[i] = tmp;
|
res[i] = tmp;
|
||||||
|
@ -5,8 +5,12 @@
|
|||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"author": "Qanhe Chen",
|
"author": "Qanhe Chen",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"scripts": {
|
||||||
|
"test": "jest"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cmake-js": "^7.1.1",
|
"cmake-js": "^7.1.1",
|
||||||
|
"jest": "^29.4.0",
|
||||||
"node-addon-api": "^5.0.0"
|
"node-addon-api": "^5.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user