mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	common : move arg parser code to arg.cpp (#9388)
				
					
				
			* common : move arg parser to arg.cpp * better categorize args * add cmake * missing climits * missing cstdarg * common : more explicit includes * fix build * refactor gpt_params_parse * update server readme * fix test --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
This commit is contained in:
		| @@ -1,3 +1,6 @@ | ||||
| #include "arg.h" | ||||
| #include "common.h" | ||||
|  | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include <sstream> | ||||
| @@ -6,18 +9,16 @@ | ||||
| #undef NDEBUG | ||||
| #include <cassert> | ||||
|  | ||||
| #include "common.h" | ||||
|  | ||||
| int main(void) { | ||||
|     gpt_params params; | ||||
|  | ||||
|     printf("test-arg-parser: make sure there is no duplicated arguments in any examples\n\n"); | ||||
|     for (int ex = 0; ex < LLAMA_EXAMPLE_COUNT; ex++) { | ||||
|         try { | ||||
|             auto options = gpt_params_parser_init(params, (enum llama_example)ex); | ||||
|             auto ctx_arg = gpt_params_parser_init(params, (enum llama_example)ex); | ||||
|             std::unordered_set<std::string> seen_args; | ||||
|             std::unordered_set<std::string> seen_env_vars; | ||||
|             for (const auto & opt : options) { | ||||
|             for (const auto & opt : ctx_arg.options) { | ||||
|                 // check for args duplications | ||||
|                 for (const auto & arg : opt.args) { | ||||
|                     if (seen_args.find(arg) == seen_args.end()) { | ||||
| @@ -52,40 +53,51 @@ int main(void) { | ||||
|     }; | ||||
|  | ||||
|     std::vector<std::string> argv; | ||||
|     auto options = gpt_params_parser_init(params, LLAMA_EXAMPLE_COMMON); | ||||
|  | ||||
|     printf("test-arg-parser: test invalid usage\n\n"); | ||||
|  | ||||
|     // missing value | ||||
|     argv = {"binary_name", "-m"}; | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|  | ||||
|     // wrong value (int) | ||||
|     argv = {"binary_name", "-ngl", "hello"}; | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|  | ||||
|     // wrong value (enum) | ||||
|     argv = {"binary_name", "-sm", "hello"}; | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|  | ||||
|     // non-existence arg in specific example (--draft cannot be used outside llama-speculative) | ||||
|     argv = {"binary_name", "--draft", "123"}; | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_SERVER)); | ||||
|  | ||||
|  | ||||
|     printf("test-arg-parser: test valid usage\n\n"); | ||||
|  | ||||
|     argv = {"binary_name", "-m", "model_file.gguf"}; | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|     assert(params.model == "model_file.gguf"); | ||||
|  | ||||
|     argv = {"binary_name", "-t", "1234"}; | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|     assert(params.cpuparams.n_threads == 1234); | ||||
|  | ||||
|     argv = {"binary_name", "--verbose"}; | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|     assert(params.verbosity == 1); | ||||
|  | ||||
|     argv = {"binary_name", "-m", "abc.gguf", "--predict", "6789", "--batch-size", "9090"}; | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|     assert(params.model == "abc.gguf"); | ||||
|     assert(params.n_predict == 6789); | ||||
|     assert(params.n_batch == 9090); | ||||
|  | ||||
|     // --draft cannot be used outside llama-speculative | ||||
|     argv = {"binary_name", "--draft", "123"}; | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_SPECULATIVE)); | ||||
|     assert(params.n_draft == 123); | ||||
|  | ||||
| // skip this part on windows, because setenv is not supported | ||||
| #ifdef _WIN32 | ||||
|     printf("test-arg-parser: skip on windows build\n"); | ||||
| @@ -94,12 +106,12 @@ int main(void) { | ||||
|  | ||||
|     setenv("LLAMA_ARG_THREADS", "blah", true); | ||||
|     argv = {"binary_name"}; | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(false == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|  | ||||
|     setenv("LLAMA_ARG_MODEL", "blah.gguf", true); | ||||
|     setenv("LLAMA_ARG_THREADS", "1010", true); | ||||
|     argv = {"binary_name"}; | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|     assert(params.model == "blah.gguf"); | ||||
|     assert(params.cpuparams.n_threads == 1010); | ||||
|  | ||||
| @@ -109,7 +121,7 @@ int main(void) { | ||||
|     setenv("LLAMA_ARG_MODEL", "blah.gguf", true); | ||||
|     setenv("LLAMA_ARG_THREADS", "1010", true); | ||||
|     argv = {"binary_name", "-m", "overwritten.gguf"}; | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, options)); | ||||
|     assert(true == gpt_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_COMMON)); | ||||
|     assert(params.model == "overwritten.gguf"); | ||||
|     assert(params.cpuparams.n_threads == 1010); | ||||
| #endif // _WIN32 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Xuan Son Nguyen
					Xuan Son Nguyen