From b215eb5944c681f6b63030daf17071135b4d6681 Mon Sep 17 00:00:00 2001 From: ehhuang Date: Mon, 20 Oct 2025 15:48:37 -0700 Subject: [PATCH] chore: skip shutdown if otel_endpoint is not set (#3865) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # What does this PR do? rid following error when ctrl+c'd server │ /Users/erichuang/projects/lst3/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py:92 in │ │ shutdown │ │ │ │ 89 │ │ pass │ │ 90 │ │ │ 91 │ async def shutdown(self) -> None: │ │ ❱ 92 │ │ trace.get_tracer_provider().force_flush() │ │ 93 │ │ │ 94 │ async def log_event(self, event: Event, ttl_seconds: int = 604800) -> None: │ │ 95 │ │ if isinstance(event, UnstructuredLogEvent): │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ AttributeError: 'ProxyTracerProvider' object has no attribute 'force_flush' ## Test Plan --- .../providers/inline/telemetry/meta_reference/telemetry.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py index 2a225476b..b15b1e490 100644 --- a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py +++ b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py @@ -79,8 +79,10 @@ class TelemetryAdapter(Telemetry): metric_reader = PeriodicExportingMetricReader(OTLPMetricExporter()) metric_provider = MeterProvider(metric_readers=[metric_reader]) metrics.set_meter_provider(metric_provider) + self.is_otel_endpoint_set = True else: logger.warning("OTEL_EXPORTER_OTLP_ENDPOINT is not set, skipping telemetry") + self.is_otel_endpoint_set = False self.meter = metrics.get_meter(__name__) self._lock = _global_lock @@ -89,7 +91,8 @@ class TelemetryAdapter(Telemetry): pass async def shutdown(self) -> None: - trace.get_tracer_provider().force_flush() + if self.is_otel_endpoint_set: + trace.get_tracer_provider().force_flush() async def log_event(self, event: Event, ttl_seconds: int = 604800) -> None: if isinstance(event, UnstructuredLogEvent):