Skip to content

Commit a4bd62a

Browse files
authored
Improve the loading of OPENAI_AGENTS_DISABLE_TRACING (#2302)
1 parent f8153b9 commit a4bd62a

2 files changed

Lines changed: 83 additions & 5 deletions

File tree

src/agents/tracing/provider.py

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,10 @@ def shutdown(self) -> None:
196196
class DefaultTraceProvider(TraceProvider):
197197
def __init__(self) -> None:
198198
self._multi_processor = SynchronousMultiTracingProcessor()
199-
self._disabled = os.environ.get("OPENAI_AGENTS_DISABLE_TRACING", "false").lower() in (
200-
"true",
201-
"1",
202-
)
199+
# Lazily read env flag on first use to honor env set after import but before first trace.
200+
self._env_disabled: bool | None = None
201+
self._manual_disabled: bool | None = None
202+
self._disabled = False
203203

204204
def register_processor(self, processor: TracingProcessor):
205205
"""
@@ -229,7 +229,27 @@ def set_disabled(self, disabled: bool) -> None:
229229
"""
230230
Set whether tracing is disabled.
231231
"""
232-
self._disabled = disabled
232+
self._manual_disabled = disabled
233+
self._refresh_disabled_flag()
234+
235+
def _refresh_disabled_flag(self) -> None:
236+
"""Refresh disabled flag from cached env value and manual override.
237+
238+
The env flag is read once on first use to avoid surprises mid-run; further env
239+
changes are ignored after the manual flag is set via set_disabled, which always
240+
takes precedence over the env value.
241+
"""
242+
if self._env_disabled is None:
243+
self._env_disabled = os.environ.get(
244+
"OPENAI_AGENTS_DISABLE_TRACING", "false"
245+
).lower() in (
246+
"true",
247+
"1",
248+
)
249+
if self._manual_disabled is None:
250+
self._disabled = bool(self._env_disabled)
251+
else:
252+
self._disabled = self._manual_disabled
233253

234254
def time_iso(self) -> str:
235255
"""Return the current time in ISO 8601 format."""
@@ -259,6 +279,7 @@ def create_trace(
259279
"""
260280
Create a new trace.
261281
"""
282+
self._refresh_disabled_flag()
262283
if self._disabled or disabled:
263284
logger.debug(f"Tracing is disabled. Not creating trace {name}")
264285
return NoOpTrace()
@@ -286,6 +307,7 @@ def create_span(
286307
"""
287308
Create a new span.
288309
"""
310+
self._refresh_disabled_flag()
289311
tracing_api_key: str | None = None
290312
if self._disabled or disabled:
291313
logger.debug(f"Tracing is disabled. Not creating span {span_data}")
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from agents.tracing.provider import DefaultTraceProvider
2+
from agents.tracing.traces import NoOpTrace, TraceImpl
3+
4+
5+
def test_env_read_on_first_use(monkeypatch):
6+
"""Env flag set before first trace disables tracing."""
7+
monkeypatch.setenv("OPENAI_AGENTS_DISABLE_TRACING", "1")
8+
provider = DefaultTraceProvider()
9+
10+
trace = provider.create_trace("demo")
11+
12+
assert isinstance(trace, NoOpTrace)
13+
14+
15+
def test_env_cached_after_first_use(monkeypatch):
16+
"""Env flag is cached after the first trace and later env changes do not flip it."""
17+
monkeypatch.setenv("OPENAI_AGENTS_DISABLE_TRACING", "0")
18+
provider = DefaultTraceProvider()
19+
20+
first = provider.create_trace("first")
21+
assert isinstance(first, TraceImpl)
22+
23+
# Change env after first use; cached value should keep tracing enabled.
24+
monkeypatch.setenv("OPENAI_AGENTS_DISABLE_TRACING", "1")
25+
second = provider.create_trace("second")
26+
27+
assert isinstance(second, TraceImpl)
28+
29+
30+
def test_manual_override_after_cache(monkeypatch):
31+
"""Manual toggle still works after env value is cached."""
32+
monkeypatch.setenv("OPENAI_AGENTS_DISABLE_TRACING", "0")
33+
provider = DefaultTraceProvider()
34+
35+
provider.create_trace("warmup")
36+
provider.set_disabled(True)
37+
disabled = provider.create_trace("disabled")
38+
assert isinstance(disabled, NoOpTrace)
39+
40+
provider.set_disabled(False)
41+
enabled = provider.create_trace("enabled")
42+
assert isinstance(enabled, TraceImpl)
43+
44+
45+
def test_manual_override_env_disable(monkeypatch):
46+
"""Manual enable can override env disable flag."""
47+
monkeypatch.setenv("OPENAI_AGENTS_DISABLE_TRACING", "1")
48+
provider = DefaultTraceProvider()
49+
50+
env_disabled = provider.create_trace("env_disabled")
51+
assert isinstance(env_disabled, NoOpTrace)
52+
53+
provider.set_disabled(False)
54+
reenabled = provider.create_trace("reenabled")
55+
56+
assert isinstance(reenabled, TraceImpl)

0 commit comments

Comments
 (0)