Skip to content

Commit a981b91

Browse files
committed
fix(cli): only propagate LLM_API_KEY to the active provider key (#77)
1 parent e424bb4 commit a981b91

2 files changed

Lines changed: 23 additions & 7 deletions

File tree

openkb/cli.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,17 +125,19 @@ def _setup_llm_key(kb_dir: Path | None = None) -> None:
125125
else:
126126
litellm.api_key = api_key
127127

128-
# Dynamically set the provider-specific env var when possible
129128
if provider:
129+
# Active provider is known — set only its key, so LLM_API_KEY is not
130+
# sprayed into unrelated provider keys (e.g. MISTRAL_API_KEY, which the
131+
# Mistral parser treats as a real Mistral credential).
130132
provider_env = f"{provider.upper()}_API_KEY"
131133
if not os.environ.get(provider_env):
132134
os.environ[provider_env] = api_key
133-
134-
# Fallback: also set common provider keys so multi-provider
135-
# configs (e.g. PageIndex Cloud) still work
136-
for env_var in _KNOWN_PROVIDER_KEYS:
137-
if not os.environ.get(env_var):
138-
os.environ[env_var] = api_key
135+
else:
136+
# Provider couldn't be determined — fall back to setting the common
137+
# provider keys so multi-provider configs still work.
138+
for env_var in _KNOWN_PROVIDER_KEYS:
139+
if not os.environ.get(env_var):
140+
os.environ[env_var] = api_key
139141

140142
# Supported document extensions for the `add` command
141143
SUPPORTED_EXTENSIONS = {

tests/test_cli.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,3 +365,17 @@ async def fake_run_query(*_args, **_kwargs):
365365
assert "rnn" in saved
366366
assert "[[concepts/multi-head-attention]]" not in saved
367367
assert "multi head attention" in saved
368+
369+
370+
def test_setup_llm_key_does_not_spray_unrelated_provider_keys(tmp_path, monkeypatch):
371+
import os
372+
from openkb.cli import _setup_llm_key
373+
# KB with an openai model (known provider)
374+
openkb_dir = tmp_path / ".openkb"; openkb_dir.mkdir()
375+
(openkb_dir / "config.yaml").write_text("model: openai/gpt-4o\n")
376+
for k in ("MISTRAL_API_KEY", "OPENAI_API_KEY", "ANTHROPIC_API_KEY"):
377+
monkeypatch.delenv(k, raising=False)
378+
monkeypatch.setenv("LLM_API_KEY", "sk-test")
379+
_setup_llm_key(tmp_path)
380+
assert os.environ.get("OPENAI_API_KEY") == "sk-test" # active provider set
381+
assert os.environ.get("MISTRAL_API_KEY") is None # unrelated provider NOT sprayed

0 commit comments

Comments
 (0)