Spaces:
Running
Running
Yusuf Redžić
commited on
cli : fix segfault on missing argument (#2700)
Browse files- examples/cli/cli.cpp +34 -28
examples/cli/cli.cpp
CHANGED
|
@@ -106,6 +106,11 @@ static char * whisper_param_turn_lowercase(char * in){
|
|
| 106 |
return in;
|
| 107 |
}
|
| 108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
|
| 110 |
for (int i = 1; i < argc; i++) {
|
| 111 |
std::string arg = argv[i];
|
|
@@ -124,22 +129,23 @@ static bool whisper_params_parse(int argc, char ** argv, whisper_params & params
|
|
| 124 |
whisper_print_usage(argc, argv, params);
|
| 125 |
exit(0);
|
| 126 |
}
|
| 127 |
-
|
| 128 |
-
else if (arg == "-
|
| 129 |
-
else if (arg == "-
|
| 130 |
-
else if (arg == "-
|
| 131 |
-
else if (arg == "-
|
| 132 |
-
else if (arg == "-
|
| 133 |
-
else if (arg == "-
|
| 134 |
-
else if (arg == "-
|
| 135 |
-
else if (arg == "-
|
| 136 |
-
else if (arg == "-
|
| 137 |
-
else if (arg == "-
|
| 138 |
-
else if (arg == "-
|
| 139 |
-
else if (arg == "-
|
| 140 |
-
else if (arg == "-
|
| 141 |
-
else if (arg == "-
|
| 142 |
-
else if (arg == "-
|
|
|
|
| 143 |
else if (arg == "-debug"|| arg == "--debug-mode") { params.debug_mode = true; }
|
| 144 |
else if (arg == "-tr" || arg == "--translate") { params.translate = true; }
|
| 145 |
else if (arg == "-di" || arg == "--diarize") { params.diarize = true; }
|
|
@@ -151,31 +157,31 @@ static bool whisper_params_parse(int argc, char ** argv, whisper_params & params
|
|
| 151 |
else if (arg == "-osrt" || arg == "--output-srt") { params.output_srt = true; }
|
| 152 |
else if (arg == "-owts" || arg == "--output-words") { params.output_wts = true; }
|
| 153 |
else if (arg == "-olrc" || arg == "--output-lrc") { params.output_lrc = true; }
|
| 154 |
-
else if (arg == "-fp" || arg == "--font-path") { params.font_path =
|
| 155 |
else if (arg == "-ocsv" || arg == "--output-csv") { params.output_csv = true; }
|
| 156 |
else if (arg == "-oj" || arg == "--output-json") { params.output_jsn = true; }
|
| 157 |
else if (arg == "-ojf" || arg == "--output-json-full"){ params.output_jsn_full = params.output_jsn = true; }
|
| 158 |
-
else if (arg == "-of" || arg == "--output-file") { params.fname_out.emplace_back(
|
| 159 |
else if (arg == "-np" || arg == "--no-prints") { params.no_prints = true; }
|
| 160 |
else if (arg == "-ps" || arg == "--print-special") { params.print_special = true; }
|
| 161 |
else if (arg == "-pc" || arg == "--print-colors") { params.print_colors = true; }
|
| 162 |
else if (arg == "-pp" || arg == "--print-progress") { params.print_progress = true; }
|
| 163 |
else if (arg == "-nt" || arg == "--no-timestamps") { params.no_timestamps = true; }
|
| 164 |
-
else if (arg == "-l" || arg == "--language") { params.language = whisper_param_turn_lowercase(
|
| 165 |
else if (arg == "-dl" || arg == "--detect-language") { params.detect_language = true; }
|
| 166 |
-
else if ( arg == "--prompt") { params.prompt =
|
| 167 |
-
else if (arg == "-m" || arg == "--model") { params.model =
|
| 168 |
-
else if (arg == "-f" || arg == "--file") { params.fname_inp.emplace_back(
|
| 169 |
-
else if (arg == "-oved" || arg == "--ov-e-device") { params.openvino_encode_device =
|
| 170 |
-
else if (arg == "-dtw" || arg == "--dtw") { params.dtw =
|
| 171 |
else if (arg == "-ls" || arg == "--log-score") { params.log_score = true; }
|
| 172 |
else if (arg == "-ng" || arg == "--no-gpu") { params.use_gpu = false; }
|
| 173 |
else if (arg == "-fa" || arg == "--flash-attn") { params.flash_attn = true; }
|
| 174 |
else if (arg == "-sns" || arg == "--suppress-nst") { params.suppress_nst = true; }
|
| 175 |
-
else if ( arg == "--suppress-regex") { params.suppress_regex =
|
| 176 |
-
else if ( arg == "--grammar") { params.grammar =
|
| 177 |
-
else if ( arg == "--grammar-rule") { params.grammar_rule =
|
| 178 |
-
else if ( arg == "--grammar-penalty") { params.grammar_penalty = std::stof(
|
| 179 |
else {
|
| 180 |
fprintf(stderr, "error: unknown argument: %s\n", arg.c_str());
|
| 181 |
whisper_print_usage(argc, argv, params);
|
|
|
|
| 106 |
return in;
|
| 107 |
}
|
| 108 |
|
| 109 |
+
static char * requires_value_error(const std::string & arg) {
|
| 110 |
+
fprintf(stderr, "error: argument %s requires value\n", arg.c_str());
|
| 111 |
+
exit(0);
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
|
| 115 |
for (int i = 1; i < argc; i++) {
|
| 116 |
std::string arg = argv[i];
|
|
|
|
| 129 |
whisper_print_usage(argc, argv, params);
|
| 130 |
exit(0);
|
| 131 |
}
|
| 132 |
+
#define ARGV_NEXT (((i + 1) < argc) ? argv[++i] : requires_value_error(arg))
|
| 133 |
+
else if (arg == "-t" || arg == "--threads") { params.n_threads = std::stoi(ARGV_NEXT); }
|
| 134 |
+
else if (arg == "-p" || arg == "--processors") { params.n_processors = std::stoi(ARGV_NEXT); }
|
| 135 |
+
else if (arg == "-ot" || arg == "--offset-t") { params.offset_t_ms = std::stoi(ARGV_NEXT); }
|
| 136 |
+
else if (arg == "-on" || arg == "--offset-n") { params.offset_n = std::stoi(ARGV_NEXT); }
|
| 137 |
+
else if (arg == "-d" || arg == "--duration") { params.duration_ms = std::stoi(ARGV_NEXT); }
|
| 138 |
+
else if (arg == "-mc" || arg == "--max-context") { params.max_context = std::stoi(ARGV_NEXT); }
|
| 139 |
+
else if (arg == "-ml" || arg == "--max-len") { params.max_len = std::stoi(ARGV_NEXT); }
|
| 140 |
+
else if (arg == "-bo" || arg == "--best-of") { params.best_of = std::stoi(ARGV_NEXT); }
|
| 141 |
+
else if (arg == "-bs" || arg == "--beam-size") { params.beam_size = std::stoi(ARGV_NEXT); }
|
| 142 |
+
else if (arg == "-ac" || arg == "--audio-ctx") { params.audio_ctx = std::stoi(ARGV_NEXT); }
|
| 143 |
+
else if (arg == "-wt" || arg == "--word-thold") { params.word_thold = std::stof(ARGV_NEXT); }
|
| 144 |
+
else if (arg == "-et" || arg == "--entropy-thold") { params.entropy_thold = std::stof(ARGV_NEXT); }
|
| 145 |
+
else if (arg == "-lpt" || arg == "--logprob-thold") { params.logprob_thold = std::stof(ARGV_NEXT); }
|
| 146 |
+
else if (arg == "-nth" || arg == "--no-speech-thold") { params.no_speech_thold = std::stof(ARGV_NEXT); }
|
| 147 |
+
else if (arg == "-tp" || arg == "--temperature") { params.temperature = std::stof(ARGV_NEXT); }
|
| 148 |
+
else if (arg == "-tpi" || arg == "--temperature-inc") { params.temperature_inc = std::stof(ARGV_NEXT); }
|
| 149 |
else if (arg == "-debug"|| arg == "--debug-mode") { params.debug_mode = true; }
|
| 150 |
else if (arg == "-tr" || arg == "--translate") { params.translate = true; }
|
| 151 |
else if (arg == "-di" || arg == "--diarize") { params.diarize = true; }
|
|
|
|
| 157 |
else if (arg == "-osrt" || arg == "--output-srt") { params.output_srt = true; }
|
| 158 |
else if (arg == "-owts" || arg == "--output-words") { params.output_wts = true; }
|
| 159 |
else if (arg == "-olrc" || arg == "--output-lrc") { params.output_lrc = true; }
|
| 160 |
+
else if (arg == "-fp" || arg == "--font-path") { params.font_path = ARGV_NEXT; }
|
| 161 |
else if (arg == "-ocsv" || arg == "--output-csv") { params.output_csv = true; }
|
| 162 |
else if (arg == "-oj" || arg == "--output-json") { params.output_jsn = true; }
|
| 163 |
else if (arg == "-ojf" || arg == "--output-json-full"){ params.output_jsn_full = params.output_jsn = true; }
|
| 164 |
+
else if (arg == "-of" || arg == "--output-file") { params.fname_out.emplace_back(ARGV_NEXT); }
|
| 165 |
else if (arg == "-np" || arg == "--no-prints") { params.no_prints = true; }
|
| 166 |
else if (arg == "-ps" || arg == "--print-special") { params.print_special = true; }
|
| 167 |
else if (arg == "-pc" || arg == "--print-colors") { params.print_colors = true; }
|
| 168 |
else if (arg == "-pp" || arg == "--print-progress") { params.print_progress = true; }
|
| 169 |
else if (arg == "-nt" || arg == "--no-timestamps") { params.no_timestamps = true; }
|
| 170 |
+
else if (arg == "-l" || arg == "--language") { params.language = whisper_param_turn_lowercase(ARGV_NEXT); }
|
| 171 |
else if (arg == "-dl" || arg == "--detect-language") { params.detect_language = true; }
|
| 172 |
+
else if ( arg == "--prompt") { params.prompt = ARGV_NEXT; }
|
| 173 |
+
else if (arg == "-m" || arg == "--model") { params.model = ARGV_NEXT; }
|
| 174 |
+
else if (arg == "-f" || arg == "--file") { params.fname_inp.emplace_back(ARGV_NEXT); }
|
| 175 |
+
else if (arg == "-oved" || arg == "--ov-e-device") { params.openvino_encode_device = ARGV_NEXT; }
|
| 176 |
+
else if (arg == "-dtw" || arg == "--dtw") { params.dtw = ARGV_NEXT; }
|
| 177 |
else if (arg == "-ls" || arg == "--log-score") { params.log_score = true; }
|
| 178 |
else if (arg == "-ng" || arg == "--no-gpu") { params.use_gpu = false; }
|
| 179 |
else if (arg == "-fa" || arg == "--flash-attn") { params.flash_attn = true; }
|
| 180 |
else if (arg == "-sns" || arg == "--suppress-nst") { params.suppress_nst = true; }
|
| 181 |
+
else if ( arg == "--suppress-regex") { params.suppress_regex = ARGV_NEXT; }
|
| 182 |
+
else if ( arg == "--grammar") { params.grammar = ARGV_NEXT; }
|
| 183 |
+
else if ( arg == "--grammar-rule") { params.grammar_rule = ARGV_NEXT; }
|
| 184 |
+
else if ( arg == "--grammar-penalty") { params.grammar_penalty = std::stof(ARGV_NEXT); }
|
| 185 |
else {
|
| 186 |
fprintf(stderr, "error: unknown argument: %s\n", arg.c_str());
|
| 187 |
whisper_print_usage(argc, argv, params);
|