From bbd9002598194530a7afaf2e92baded51d869a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20M=C3=BCller?= Date: Sat, 21 Feb 2026 12:35:17 +0100 Subject: [PATCH] fix: stop mutating OPENAI env during model setup --- src/scribae/brief.py | 1 - src/scribae/idea.py | 2 -- src/scribae/llm.py | 6 ------ src/scribae/translate/postedit.py | 1 - tests/unit/brief_test.py | 17 ++++++++++++----- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/scribae/brief.py b/src/scribae/brief.py index 9e07aaa..de6ada8 100644 --- a/src/scribae/brief.py +++ b/src/scribae/brief.py @@ -333,7 +333,6 @@ def _create_agent( seed: int | None = None, ) -> Agent[None, SeoBrief]: """Instantiate the Pydantic AI agent for generating briefs.""" - settings.configure_environment() model_settings = ModelSettings(temperature=temperature) apply_optional_settings(model_settings, top_p=top_p, seed=seed) model = make_model(model_name, model_settings=model_settings, settings=settings) diff --git a/src/scribae/idea.py b/src/scribae/idea.py index c3e59d2..159550e 100644 --- a/src/scribae/idea.py +++ b/src/scribae/idea.py @@ -230,8 +230,6 @@ def _create_agent( seed: int | None = None, ) -> Agent[None, IdeaList]: """Instantiate the Pydantic AI agent for generating ideas.""" - - settings.configure_environment() model_settings = ModelSettings(temperature=temperature) apply_optional_settings(model_settings, top_p=top_p, seed=seed) model = make_model(model_name, model_settings=model_settings, settings=settings) diff --git a/src/scribae/llm.py b/src/scribae/llm.py index 2f771fb..8656293 100644 --- a/src/scribae/llm.py +++ b/src/scribae/llm.py @@ -28,12 +28,6 @@ def from_env(cls) -> OpenAISettings: api_key = os.environ.get("OPENAI_API_KEY") or DEFAULT_API_KEY return cls(base_url=base_url, api_key=api_key) - def configure_environment(self) -> None: - """Configure environment variables expected by OpenAI-compatible clients.""" - os.environ["OPENAI_BASE_URL"] = self.base_url - os.environ["OPENAI_API_BASE"] = self.base_url - os.environ["OPENAI_API_KEY"] = self.api_key - def make_model( model_name: str, *, model_settings: ModelSettings, settings: OpenAISettings | None = None diff --git a/src/scribae/translate/postedit.py b/src/scribae/translate/postedit.py index 55fd616..16f32b8 100644 --- a/src/scribae/translate/postedit.py +++ b/src/scribae/translate/postedit.py @@ -380,7 +380,6 @@ def _create_agent( seed: int | None = None, ) -> Agent[None, str] | None: settings = OpenAISettings.from_env() - settings.configure_environment() model_settings = ModelSettings(temperature=temperature) apply_optional_settings(model_settings, top_p=top_p, seed=seed) model = make_model(model_name, model_settings=model_settings, settings=settings) diff --git a/tests/unit/brief_test.py b/tests/unit/brief_test.py index 76a178f..2417339 100644 --- a/tests/unit/brief_test.py +++ b/tests/unit/brief_test.py @@ -142,16 +142,23 @@ def _boom(*_: object, **__: object) -> None: assert "schema" in str(excinfo.value) -def test_configure_environment_sets_openai_environment(monkeypatch: pytest.MonkeyPatch) -> None: +def test_generate_brief_does_not_mutate_openai_environment(monkeypatch: pytest.MonkeyPatch, fake: Faker) -> None: + context = _briefing_context(fake) + brief_obj = SeoBrief(**_base_payload(fake)) + monkeypatch.setattr("scribae.brief._invoke_agent", lambda *_, **__: brief_obj) for var in ("OPENAI_BASE_URL", "OPENAI_API_BASE", "OPENAI_API_KEY"): monkeypatch.delenv(var, raising=False) settings = OpenAISettings(base_url="https://example.com/v1", api_key="token") - settings.configure_environment() + generate_brief( + context, + model_name="gpt-4o-mini", + temperature=0.2, + settings=settings, + ) - assert os.environ["OPENAI_BASE_URL"] == "https://example.com/v1" - assert os.environ["OPENAI_API_BASE"] == "https://example.com/v1" - assert os.environ["OPENAI_API_KEY"] == "token" + for var in ("OPENAI_BASE_URL", "OPENAI_API_BASE", "OPENAI_API_KEY"): + assert var not in os.environ def test_openai_settings_from_env_prefers_api_base(monkeypatch: pytest.MonkeyPatch) -> None: