From 18436255afafb79e6be957b8d973afe32dd87f48 Mon Sep 17 00:00:00 2001 From: Taksh Date: Wed, 24 Jun 2026 21:46:03 +0530 Subject: [PATCH 1/2] fix: map uvicorn stderr prefixes to correct log levels Co-authored-by: Cursor --- fastchat/utils.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/fastchat/utils.py b/fastchat/utils.py index d3531928f..71c79689e 100644 --- a/fastchat/utils.py +++ b/fastchat/utils.py @@ -52,7 +52,7 @@ def build_logger(logger_name, logger_filename): sys.stdout = sl stderr_logger = logging.getLogger("stderr") - stderr_logger.setLevel(logging.ERROR) + stderr_logger.setLevel(logging.DEBUG) sl = StreamToLogger(stderr_logger, logging.ERROR) sys.stderr = sl @@ -106,17 +106,33 @@ def write(self, buf): # translates them so this is still cross platform. if line[-1] == "\n": encoded_message = line.encode("utf-8", "ignore").decode("utf-8") - self.logger.log(self.log_level, encoded_message.rstrip()) + level = infer_stream_log_level(encoded_message, self.log_level) + self.logger.log(level, encoded_message.rstrip()) else: self.linebuf += line def flush(self): if self.linebuf != "": encoded_message = self.linebuf.encode("utf-8", "ignore").decode("utf-8") - self.logger.log(self.log_level, encoded_message.rstrip()) + level = infer_stream_log_level(encoded_message, self.log_level) + self.logger.log(level, encoded_message.rstrip()) self.linebuf = "" +def infer_stream_log_level(line: str, default: int) -> int: + """Map uvicorn-style stderr prefixes to the correct log level.""" + stripped = line.lstrip() + if stripped.startswith("INFO:"): + return logging.INFO + if stripped.startswith("WARNING:") or stripped.startswith("WARN:"): + return logging.WARNING + if stripped.startswith("ERROR:") or stripped.startswith("CRITICAL:"): + return logging.ERROR + if stripped.startswith("DEBUG:"): + return logging.DEBUG + return default + + def disable_torch_init(): """ Disable the redundant torch default initialization to accelerate model creation. From df71f61e0533285fea20279dc3ec94a3b32c6571 Mon Sep 17 00:00:00 2001 From: Taksh Date: Sat, 27 Jun 2026 07:52:09 +0530 Subject: [PATCH 2/2] test: cover uvicorn stderr log level mapping Co-authored-by: Cursor --- tests/test_stream_logger.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tests/test_stream_logger.py diff --git a/tests/test_stream_logger.py b/tests/test_stream_logger.py new file mode 100644 index 000000000..5f82f6d38 --- /dev/null +++ b/tests/test_stream_logger.py @@ -0,0 +1,10 @@ +import logging + +from fastchat.utils import infer_stream_log_level + + +def test_infer_stream_log_level_maps_uvicorn_prefixes(): + assert infer_stream_log_level("INFO: Started server", logging.ERROR) == logging.INFO + assert infer_stream_log_level("WARNING: deprecated", logging.ERROR) == logging.WARNING + assert infer_stream_log_level("ERROR: boom", logging.ERROR) == logging.ERROR + assert infer_stream_log_level("plain stderr line", logging.ERROR) == logging.ERROR