ctx_params = llama_context_default_params();
model_params = llama_model_default_params();
context_size_default = ctx_params.n_batch;
+ n_threads_default = ctx_params.n_threads;
ngl_default = model_params.n_gpu_layers;
common_params_sampling sampling;
temperature_default = sampling.temp;
ctx_params.n_batch = context_size >= 0 ? context_size : context_size_default;
ctx_params.n_ctx = ctx_params.n_batch;
+ ctx_params.n_threads = ctx_params.n_threads_batch = n_threads >= 0 ? n_threads : n_threads_default;
model_params.n_gpu_layers = ngl >= 0 ? ngl : ngl_default;
temperature = temperature >= 0 ? temperature : temperature_default;
std::string chat_template_file;
std::string user;
bool use_jinja = false;
- int context_size = -1, ngl = -1;
+ int context_size = -1, ngl = -1, n_threads = -1;
float temperature = -1;
bool verbose = false;
private:
- int context_size_default = -1, ngl_default = -1;
+ int context_size_default = -1, ngl_default = -1, n_threads_default = -1;
float temperature_default = -1;
bool help = false;
return 0;
}
+ int parse_options_with_value(int argc, const char ** argv, int & i, bool & options_parsing) {
+ if (options_parsing && (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--context-size") == 0)) {
+ if (handle_option_with_value(argc, argv, i, context_size) == 1) {
+ return 1;
+ }
+ } else if (options_parsing &&
+ (strcmp(argv[i], "-n") == 0 || strcmp(argv[i], "-ngl") == 0 || strcmp(argv[i], "--ngl") == 0)) {
+ if (handle_option_with_value(argc, argv, i, ngl) == 1) {
+ return 1;
+ }
+ } else if (options_parsing && (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--threads") == 0)) {
+ if (handle_option_with_value(argc, argv, i, n_threads) == 1) {
+ return 1;
+ }
+ } else if (options_parsing && strcmp(argv[i], "--temp") == 0) {
+ if (handle_option_with_value(argc, argv, i, temperature) == 1) {
+ return 1;
+ }
+ } else if (options_parsing && strcmp(argv[i], "--chat-template-file") == 0) {
+ if (handle_option_with_value(argc, argv, i, chat_template_file) == 1) {
+ return 1;
+ }
+ use_jinja = true;
+ } else {
+ return 2;
+ }
+
+ return 0;
+ }
+
+ int parse_options(const char ** argv, int & i, bool & options_parsing) {
+ if (options_parsing && (parse_flag(argv, i, "-v", "--verbose") || parse_flag(argv, i, "-v", "--log-verbose"))) {
+ verbose = true;
+ } else if (options_parsing && strcmp(argv[i], "--jinja") == 0) {
+ use_jinja = true;
+ } else if (options_parsing && parse_flag(argv, i, "-h", "--help")) {
+ help = true;
+ return 0;
+ } else if (options_parsing && strcmp(argv[i], "--") == 0) {
+ options_parsing = false;
+ } else {
+ return 2;
+ }
+
+ return 0;
+ }
+
+ int parse_positional_args(const char ** argv, int & i, int & positional_args_i) {
+ if (positional_args_i == 0) {
+ if (!argv[i][0] || argv[i][0] == '-') {
+ return 1;
+ }
+
+ ++positional_args_i;
+ model_ = argv[i];
+ } else if (positional_args_i == 1) {
+ ++positional_args_i;
+ user = argv[i];
+ } else {
+ user += " " + std::string(argv[i]);
+ }
+
+ return 0;
+ }
+
int parse(int argc, const char ** argv) {
bool options_parsing = true;
for (int i = 1, positional_args_i = 0; i < argc; ++i) {
- if (options_parsing && (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--context-size") == 0)) {
- if (handle_option_with_value(argc, argv, i, context_size) == 1) {
- return 1;
- }
- } else if (options_parsing &&
- (strcmp(argv[i], "-n") == 0 || strcmp(argv[i], "-ngl") == 0 || strcmp(argv[i], "--ngl") == 0)) {
- if (handle_option_with_value(argc, argv, i, ngl) == 1) {
- return 1;
- }
- } else if (options_parsing && strcmp(argv[i], "--temp") == 0) {
- if (handle_option_with_value(argc, argv, i, temperature) == 1) {
- return 1;
- }
- } else if (options_parsing &&
- (parse_flag(argv, i, "-v", "--verbose") || parse_flag(argv, i, "-v", "--log-verbose"))) {
- verbose = true;
- } else if (options_parsing && strcmp(argv[i], "--jinja") == 0) {
- use_jinja = true;
- } else if (options_parsing && strcmp(argv[i], "--chat-template-file") == 0){
- if (handle_option_with_value(argc, argv, i, chat_template_file) == 1) {
- return 1;
- }
- use_jinja = true;
- } else if (options_parsing && parse_flag(argv, i, "-h", "--help")) {
- help = true;
- return 0;
- } else if (options_parsing && strcmp(argv[i], "--") == 0) {
- options_parsing = false;
- } else if (positional_args_i == 0) {
- if (!argv[i][0] || argv[i][0] == '-') {
- return 1;
- }
-
- ++positional_args_i;
- model_ = argv[i];
- } else if (positional_args_i == 1) {
- ++positional_args_i;
- user = argv[i];
- } else {
- user += " " + std::string(argv[i]);
+ int ret = parse_options_with_value(argc, argv, i, options_parsing);
+ if (ret == 0) {
+ continue;
+ } else if (ret == 1) {
+ return ret;
+ }
+
+ ret = parse_options(argv, i, options_parsing);
+ if (ret == 0) {
+ continue;
+ } else if (ret == 1) {
+ return ret;
+ }
+
+ if (parse_positional_args(argv, i, positional_args_i)) {
+ return 1;
}
}
- if (model_.empty()){
+ if (model_.empty()) {
return 1;
}
" Number of GPU layers (default: %d)\n"
" --temp <value>\n"
" Temperature (default: %.1f)\n"
+ " -t, --threads <value>\n"
+ " Number of threads to use during generation (default: %d)\n"
" -v, --verbose, --log-verbose\n"
" Set verbosity level to infinity (i.e. log all messages, useful for debugging)\n"
" -h, --help\n"
" llama-run file://some-file3.gguf\n"
" llama-run --ngl 999 some-file4.gguf\n"
" llama-run --ngl 999 some-file5.gguf Hello World\n",
- context_size_default, ngl_default, temperature_default);
+ context_size_default, ngl_default, temperature_default, n_threads_default);
}
};