ref #57, #62, #63 : remove unions in C-api + remove designated initializers

We are not ready for designated initializers - many compilers do not
support this C++ feature yet, so removing it's non-trivial usages.
pull/67/head
Georgi Gerganov 2022-10-18 18:17:24 +03:00
parent d6b84b2a23
commit e30cf83158
No known key found for this signature in database
GPG Key ID: 449E073F9DC10735
4 changed files with 57 additions and 55 deletions

View File

@ -216,7 +216,7 @@ int main(int argc, char ** argv) {
// run the inference // run the inference
{ {
whisper_full_params wparams = whisper_full_default_params(WHISPER_DECODE_GREEDY); whisper_full_params wparams = whisper_full_default_params(WHISPER_SAMPLING_GREEDY);
wparams.print_realtime = true; wparams.print_realtime = true;
wparams.print_progress = false; wparams.print_progress = false;

View File

@ -282,7 +282,7 @@ int main(int argc, char ** argv) {
// run the inference // run the inference
{ {
whisper_full_params wparams = whisper_full_default_params(WHISPER_DECODE_GREEDY); whisper_full_params wparams = whisper_full_default_params(WHISPER_SAMPLING_GREEDY);
wparams.print_progress = false; wparams.print_progress = false;
wparams.print_special_tokens = params.print_special_tokens; wparams.print_special_tokens = params.print_special_tokens;

View File

@ -2256,59 +2256,63 @@ void whisper_print_timings(struct whisper_context * ctx) {
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
struct whisper_full_params whisper_full_default_params(enum whisper_decode_strategy strategy) { struct whisper_full_params whisper_full_default_params(enum whisper_sampling_strategy strategy) {
struct whisper_full_params result; struct whisper_full_params result;
switch (strategy) { switch (strategy) {
case WHISPER_DECODE_GREEDY: case WHISPER_SAMPLING_GREEDY:
{ {
#if defined(_MSC_VER)
result = { result = {
#else /*.strategy =*/ WHISPER_SAMPLING_GREEDY,
result = (struct whisper_full_params) {
#endif
.strategy = WHISPER_DECODE_GREEDY,
.n_threads = std::min(4, (int32_t) std::thread::hardware_concurrency()),
.offset_ms = 0,
.translate = false, /*.n_threads =*/ std::min(4, (int32_t) std::thread::hardware_concurrency()),
.no_context = false, /*.offset_ms =*/ 0,
.print_special_tokens = false,
.print_progress = true,
.print_realtime = false,
.print_timestamps = true,
.language = "en", /*.translate =*/ false,
/*.no_context =*/ false,
/*.print_special_tokens =*/ false,
/*.print_progress =*/ true,
/*.print_realtime =*/ false,
/*.print_timestamps =*/ true,
.greedy = { /*.language =*/ "en",
.n_past = 0,
/*.greedy =*/ {
/*.n_past =*/ 0,
},
/*.beam_search =*/ {
/*.n_past =*/ -1,
/*.beam_width =*/ -1,
/*.n_best =*/ -1,
}, },
}; };
} break; } break;
case WHISPER_DECODE_BEAM_SEARCH: case WHISPER_SAMPLING_BEAM_SEARCH:
{ {
#if defined(_MSC_VER)
result = { result = {
#else /*.strategy =*/ WHISPER_SAMPLING_BEAM_SEARCH,
result = (struct whisper_full_params) {
#endif
.strategy = WHISPER_DECODE_BEAM_SEARCH,
.n_threads = std::min(4, (int32_t) std::thread::hardware_concurrency()),
.offset_ms = 0,
.translate = false, /*.n_threads =*/ std::min(4, (int32_t) std::thread::hardware_concurrency()),
.no_context = false, /*.offset_ms =*/ 0,
.print_special_tokens = false,
.print_progress = true,
.print_realtime = false,
.print_timestamps = true,
.language = "en", /*.translate =*/ false,
/*.no_context =*/ false,
/*.print_special_tokens =*/ false,
/*.print_progress =*/ true,
/*.print_realtime =*/ false,
/*.print_timestamps =*/ true,
.beam_search = { /*.language =*/ "en",
.n_past = 0,
.beam_width = 10, /*.greedy =*/ {
.n_best = 5, /*.n_past =*/ -1,
},
/*.beam_search =*/ {
/*.n_past =*/ 0,
/*.beam_width =*/ 10,
/*.n_best =*/ 5,
}, },
}; };
} break; } break;

View File

@ -153,14 +153,14 @@ extern "C" {
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// Available decoding strategies // Available sampling strategies
enum whisper_decode_strategy { enum whisper_sampling_strategy {
WHISPER_DECODE_GREEDY, // Always select the most probable token WHISPER_SAMPLING_GREEDY, // Always select the most probable token
WHISPER_DECODE_BEAM_SEARCH, // TODO: not implemented yet! WHISPER_SAMPLING_BEAM_SEARCH, // TODO: not implemented yet!
}; };
struct whisper_full_params { struct whisper_full_params {
enum whisper_decode_strategy strategy; enum whisper_sampling_strategy strategy;
int n_threads; int n_threads;
int offset_ms; int offset_ms;
@ -174,20 +174,18 @@ extern "C" {
const char * language; const char * language;
union { struct {
struct { int n_past;
int n_past; } greedy;
} greedy;
struct { struct {
int n_past; int n_past;
int beam_width; int beam_width;
int n_best; int n_best;
} beam_search; } beam_search;
};
}; };
WHISPER_API struct whisper_full_params whisper_full_default_params(enum whisper_decode_strategy strategy); WHISPER_API struct whisper_full_params whisper_full_default_params(enum whisper_sampling_strategy strategy);
// Run the entire model: PCM -> log mel spectrogram -> encoder -> decoder -> text // Run the entire model: PCM -> log mel spectrogram -> encoder -> decoder -> text
// Uses the specified decoding strategy to obtain the text. // Uses the specified decoding strategy to obtain the text.