diff --git a/python/sglang/srt/managers/request_metrics_exporter.py b/python/sglang/srt/managers/request_metrics_exporter.py index 95f1fda8f..2ecc655b7 100644 --- a/python/sglang/srt/managers/request_metrics_exporter.py +++ b/python/sglang/srt/managers/request_metrics_exporter.py @@ -12,6 +12,10 @@ from sglang.srt.server_args import ServerArgs logger = logging.getLogger(__name__) +# Fields that should always be excluded from request parameters +# because they contain non-JSON-serializable objects (e.g., ImageData, tensors) +ALWAYS_EXCLUDE_FIELDS = {"image_data", "video_data", "audio_data", "input_embeds"} + class RequestMetricsExporter(ABC): """Abstract base class for exporting request-level performance metrics to a data destination.""" @@ -35,7 +39,11 @@ class RequestMetricsExporter(ABC): request_params = {} for field in dataclasses.fields(obj): field_name = field.name - if field_name not in self.obj_skip_names: + # Skip fields in obj_skip_names or fields that are always excluded (not JSON serializable) + if ( + field_name not in self.obj_skip_names + and field_name not in ALWAYS_EXCLUDE_FIELDS + ): value = getattr(obj, field_name) # Convert to serializable format if value is not None: