diff --git a/langfuse/_client/resource_manager.py b/langfuse/_client/resource_manager.py index a61101fe3..8c9d5c41b 100644 --- a/langfuse/_client/resource_manager.py +++ b/langfuse/_client/resource_manager.py @@ -677,6 +677,11 @@ def _init_tracer_provider( otel_trace_api.set_tracer_provider(provider) else: + if sample_rate is not None and sample_rate < 1: + langfuse_logger.warning( + "Configuration: sample_rate was ignored because an OpenTelemetry TracerProvider is already registered. " + "Configure the sampler on your own TracerProvider instead." + ) if id_generator is not None: langfuse_logger.warning( "Configuration: id_generator was ignored because an OpenTelemetry TracerProvider is already registered. " diff --git a/langfuse/_task_manager/score_ingestion_consumer.py b/langfuse/_task_manager/score_ingestion_consumer.py index 1dce00f80..b1854c2ba 100644 --- a/langfuse/_task_manager/score_ingestion_consumer.py +++ b/langfuse/_task_manager/score_ingestion_consumer.py @@ -187,7 +187,10 @@ def execute_task_with_backoff(batch: List[Any]) -> None: and 400 <= int(e.status) < 500 and int(e.status) != 429 # retry if rate-limited ): - return + # Non-retryable 4xx: the batch is permanently lost. + # Raise so handle_exception logs the loss instead of + # silently pretending the batch was delivered. + raise e raise e