diff --git a/src/agents/tracing/processors.py b/src/agents/tracing/processors.py index 54858175e..32fd290ec 100644 --- a/src/agents/tracing/processors.py +++ b/src/agents/tracing/processors.py @@ -69,9 +69,12 @@ def set_api_key(self, api_key: str): api_key: The OpenAI API key to use. This is the same key used by the OpenAI Python client. """ - # We're specifically setting the underlying cached property as well + # Clear the cached property if it exists + if 'api_key' in self.__dict__: + del self.__dict__['api_key'] + + # Update the private attribute self._api_key = api_key - self.api_key = api_key @cached_property def api_key(self): diff --git a/tests/tracing/test_set_api_key_fix.py b/tests/tracing/test_set_api_key_fix.py new file mode 100644 index 000000000..8022d9fe3 --- /dev/null +++ b/tests/tracing/test_set_api_key_fix.py @@ -0,0 +1,32 @@ +import os + +from agents.tracing.processors import BackendSpanExporter + + +def test_set_api_key_preserves_env_fallback(): + """Test that set_api_key doesn't break environment variable fallback.""" + # Set up environment + original_key = os.environ.get("OPENAI_API_KEY") + os.environ["OPENAI_API_KEY"] = "env-key" + + try: + exporter = BackendSpanExporter() + + # Initially should use env var + assert exporter.api_key == "env-key" + + # Set explicit key + exporter.set_api_key("explicit-key") + assert exporter.api_key == "explicit-key" + + # Clear explicit key and verify env fallback works + exporter._api_key = None + if "api_key" in exporter.__dict__: + del exporter.__dict__["api_key"] + assert exporter.api_key == "env-key" + + finally: + if original_key is None: + os.environ.pop("OPENAI_API_KEY", None) + else: + os.environ["OPENAI_API_KEY"] = original_key