fix --context-file option to be provided multiple times for multiple files

This commit is contained in:
Minsoo Cheong 2024-03-24 21:11:10 +09:00
parent 56b7db971e
commit 5d02fe94bd

View file

@ -11,14 +11,12 @@ struct retrieval_params {
}; };
static void retrieval_params_print_usage(int argc, char** argv, gpt_params & gpt_params, retrieval_params & params) { static void retrieval_params_print_usage(int argc, char** argv, gpt_params & gpt_params, retrieval_params & params) {
fprintf(stderr, "usage: retrieval [options]\n"); gpt_print_usage(argc, argv, gpt_params);
fprintf(stderr, "options:\n"); printf(" --context-file FNAME files containing context to embed.\n");
printf(" --context-files FNAME1 FNAME2...\n"); printf(" specify multiple files by providing --context-file option multiple times.\n");
printf(" files containing context to embed.\n");
printf(" --chunk-size N minimum length of embedded text chunk (default:%d)\n", params.chunk_size); printf(" --chunk-size N minimum length of embedded text chunk (default:%d)\n", params.chunk_size);
printf(" --chunk-separator STRING\n"); printf(" --chunk-separator STRING\n");
printf(" string to separate chunks (default: \"\\n\")\n"); printf(" string to separate chunks (default: \"\\n\")\n");
gpt_print_usage(argc, argv, gpt_params);
} }
static void retrieval_params_parse(int argc, char ** argv, gpt_params & gpt_params, retrieval_params & retrieval_params) { static void retrieval_params_parse(int argc, char ** argv, gpt_params & gpt_params, retrieval_params & retrieval_params) {
@ -34,26 +32,20 @@ static void retrieval_params_parse(int argc, char ** argv, gpt_params & gpt_para
exit(1); exit(1);
} }
// option was parsed by gpt_params_find_arg // option was parsed by gpt_params_find_arg
} else if (arg == "--context-files") { } else if (arg == "--context-file") {
if (++i >= argc) { if (++i >= argc) {
fprintf(stderr, "error: missing argument for --context-files\n"); fprintf(stderr, "error: missing argument for --context-files\n");
retrieval_params_print_usage(argc, argv, gpt_params, retrieval_params); retrieval_params_print_usage(argc, argv, gpt_params, retrieval_params);
exit(1); exit(1);
} }
while(true) { std::ifstream file(argv[i]);
std::ifstream file(argv[i]); if (!file) {
if (!file) { fprintf(stderr, "error: failed to open file '%s'\n", argv[i]);
fprintf(stderr, "error: failed to open file '%s'\n", argv[i]); retrieval_params_print_usage(argc, argv, gpt_params, retrieval_params);
retrieval_params_print_usage(argc, argv, gpt_params, retrieval_params); exit(1);
exit(1);
}
// store the external file name in params
retrieval_params.context_files.push_back(argv[i]);
if (i + 1 >= argc || argv[i + 1][0] == '-') {
break;
}
i++;
} }
// store the external file name in params
retrieval_params.context_files.push_back(argv[i]);
} else if (arg == "--chunk-size") { } else if (arg == "--chunk-size") {
if (++i >= argc) { if (++i >= argc) {
fprintf(stderr, "error: missing argument for --chunk-size\n"); fprintf(stderr, "error: missing argument for --chunk-size\n");