server: log prompts to directory (#22031)
* server: log prompts to directory Add `--log-prompts-dir` to write each prompt to a separate text file in the specified directory. * Apply suggestion from @ngxson --------- Co-authored-by: Xuan-Son Nguyen <thichthat@gmail.com>
This commit is contained in:
co-authored by
Xuan-Son Nguyen
parent
efbacf8d21
commit
1e912561dd
@@ -3333,6 +3333,13 @@ common_params_context common_params_parser_init(common_params & params, llama_ex
|
|||||||
common_log_set_file(common_log_main(), value.c_str());
|
common_log_set_file(common_log_main(), value.c_str());
|
||||||
}
|
}
|
||||||
).set_env("LLAMA_ARG_LOG_FILE"));
|
).set_env("LLAMA_ARG_LOG_FILE"));
|
||||||
|
add_opt(common_arg(
|
||||||
|
{"--log-prompts-dir"}, "PATH",
|
||||||
|
"Log prompts to directory (only used for debugging, default: disabled)",
|
||||||
|
[](common_params & params, const std::string & value) {
|
||||||
|
params.path_prompts_log_dir = value;
|
||||||
|
}
|
||||||
|
).set_examples({LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}));
|
||||||
add_opt(common_arg(
|
add_opt(common_arg(
|
||||||
{"--log-colors"}, "[on|off|auto]",
|
{"--log-colors"}, "[on|off|auto]",
|
||||||
"Set colored logging ('on', 'off', or 'auto', default: 'auto')\n"
|
"Set colored logging ('on', 'off', or 'auto', default: 'auto')\n"
|
||||||
|
|||||||
@@ -489,6 +489,7 @@ struct common_params {
|
|||||||
std::string input_prefix = ""; // string to prefix user inputs with // NOLINT
|
std::string input_prefix = ""; // string to prefix user inputs with // NOLINT
|
||||||
std::string input_suffix = ""; // string to suffix user inputs with // NOLINT
|
std::string input_suffix = ""; // string to suffix user inputs with // NOLINT
|
||||||
std::string logits_file = ""; // file for saving *all* logits // NOLINT
|
std::string logits_file = ""; // file for saving *all* logits // NOLINT
|
||||||
|
std::string path_prompts_log_dir = ""; // directory with logged prompts // NOLINT
|
||||||
|
|
||||||
// llama-debug specific options
|
// llama-debug specific options
|
||||||
std::string logits_output_dir = "data"; // directory for saving logits output files // NOLINT
|
std::string logits_output_dir = "data"; // directory for saving logits output files // NOLINT
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
// fix problem with std::min and std::max
|
// fix problem with std::min and std::max
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
@@ -3719,6 +3720,16 @@ std::unique_ptr<server_res_generator> server_routes::handle_completions_impl(
|
|||||||
// TODO: this log can become very long, put it behind a flag or think about a more compact format
|
// TODO: this log can become very long, put it behind a flag or think about a more compact format
|
||||||
//SRV_DBG("Prompt: %s\n", prompt.is_string() ? prompt.get<std::string>().c_str() : prompt.dump(2).c_str());
|
//SRV_DBG("Prompt: %s\n", prompt.is_string() ? prompt.get<std::string>().c_str() : prompt.dump(2).c_str());
|
||||||
|
|
||||||
|
if (!params.path_prompts_log_dir.empty()) {
|
||||||
|
const auto file_path = std::filesystem::path(params.path_prompts_log_dir) / string_format("%012" PRId64 ".txt", ggml_time_ms());
|
||||||
|
std::ofstream f(file_path);
|
||||||
|
if (f) {
|
||||||
|
f << (prompt.is_string() ? prompt.get<std::string>().c_str() : prompt.dump(2).c_str());
|
||||||
|
} else {
|
||||||
|
SRV_ERR("failed to create %s\n", file_path.string().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// process prompt
|
// process prompt
|
||||||
std::vector<server_tokens> inputs;
|
std::vector<server_tokens> inputs;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user