diff --git a/litellm/integrations/datadog/datadog.py b/litellm/integrations/datadog/datadog.py index 503e8d8c87a..3a41277c95d 100644 --- a/litellm/integrations/datadog/datadog.py +++ b/litellm/integrations/datadog/datadog.py @@ -230,7 +230,7 @@ class DataDogLogger( self.intake_url, ) - response = await self.async_send_compressed_data(self.log_queue) + response = await self.async_send_compressed_data(list(self.log_queue)) if response.status_code == 413: verbose_logger.exception(DD_ERRORS.DATADOG_413_ERROR.value) return diff --git a/litellm/integrations/datadog/datadog_llm_obs.py b/litellm/integrations/datadog/datadog_llm_obs.py index 75003e38cd6..5db09bbbfa0 100644 --- a/litellm/integrations/datadog/datadog_llm_obs.py +++ b/litellm/integrations/datadog/datadog_llm_obs.py @@ -139,14 +139,14 @@ class DataDogLLMObsLogger(CustomBatchLogger[LLMObsPayload]): f"DataDogLLMObs: Flushing {len(self.log_queue)} events" ) - # Prepare the payload + # Prepare the payload (use list() so serialization gets a list, not BoundedQueue) payload = { "data": DDIntakePayload( type="span", attributes=DDSpanAttributes( ml_app=get_datadog_service(), tags=[get_datadog_tags()], - spans=self.log_queue, + spans=list(self.log_queue), ), ), } diff --git a/litellm/integrations/generic_api/generic_api_callback.py b/litellm/integrations/generic_api/generic_api_callback.py index 5b00f2dd623..5cb79b61209 100644 --- a/litellm/integrations/generic_api/generic_api_callback.py +++ b/litellm/integrations/generic_api/generic_api_callback.py @@ -342,11 +342,12 @@ class GenericAPILogger(CustomBatchLogger[Union[Dict, StandardLoggingPayload]]): f"Generic API Logger - sent log {idx}, status: {result.status_code}" # type: ignore ) else: - # Format the payload based on log_format + # Format the payload based on log_format (use list() so JSON gets a list, not BoundedQueue) + batch = list(self.log_queue) if self.log_format == "json_array": - data = safe_dumps(self.log_queue) + data = safe_dumps(batch) elif self.log_format == "ndjson": - data = "\n".join(safe_dumps(log) for log in self.log_queue) + data = "\n".join(safe_dumps(log) for log in batch) else: raise ValueError(f"Unknown log_format: {self.log_format}")