mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-15 16:49:24 +03:00
fix(providers): stop writing API keys into process os.environ
OpenAICompatProvider already passes api_key into AsyncOpenAI. Mutating shared os.environ leaked credentials across providers (gateway overwrite and setdefault first-writer-wins). Fixes #4784
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
"""Provider credentials must not leak through process-global os.environ."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
from nanobot.providers.openai_compat_provider import OpenAICompatProvider
|
||||
from nanobot.providers.registry import find_by_name
|
||||
|
||||
|
||||
def test_provider_init_does_not_mutate_shared_env_keys(monkeypatch) -> None:
|
||||
"""Multi-provider setups must not overwrite or pin each other's keys."""
|
||||
monkeypatch.delenv("OPENAI_API_KEY", raising=False)
|
||||
monkeypatch.delenv("OPENROUTER_API_KEY", raising=False)
|
||||
|
||||
openai_spec = find_by_name("openai")
|
||||
openrouter_spec = find_by_name("openrouter")
|
||||
assert openai_spec is not None and openrouter_spec is not None
|
||||
|
||||
OpenAICompatProvider(
|
||||
api_key="sk-openai-secret",
|
||||
default_model="gpt-4o",
|
||||
spec=openai_spec,
|
||||
)
|
||||
OpenAICompatProvider(
|
||||
api_key="sk-or-secret",
|
||||
default_model="openrouter/auto",
|
||||
spec=openrouter_spec,
|
||||
api_base="https://openrouter.ai/api/v1",
|
||||
)
|
||||
|
||||
assert "OPENAI_API_KEY" not in os.environ
|
||||
assert "OPENROUTER_API_KEY" not in os.environ
|
||||
|
||||
|
||||
def test_provider_init_preserves_preexisting_env_keys(monkeypatch) -> None:
|
||||
monkeypatch.setenv("OPENAI_API_KEY", "preexisting-user-key")
|
||||
|
||||
openai_spec = find_by_name("openai")
|
||||
assert openai_spec is not None
|
||||
provider = OpenAICompatProvider(
|
||||
api_key="sk-from-config",
|
||||
default_model="gpt-4o",
|
||||
spec=openai_spec,
|
||||
)
|
||||
|
||||
assert os.environ["OPENAI_API_KEY"] == "preexisting-user-key"
|
||||
assert provider._api_key_for_client == "sk-from-config"
|
||||
Reference in New Issue
Block a user