Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,15 @@ export PERPLEXITY_API_KEY="your-api-key" # for search capabilities
export STRIX_REASONING_EFFORT="high" # control thinking effort (default: high, quick scan: medium)
```

Provider-native keys are also picked up automatically. For example, to use
[Groq's](https://console.groq.com/) fast inference you can set `GROQ_API_KEY`
directly instead of `LLM_API_KEY`:

```bash
export STRIX_LLM="groq/llama-3.3-70b-versatile"
export GROQ_API_KEY="your-api-key"
```

> [!NOTE]
> Strix automatically saves your configuration to `~/.strix/cli-config.json`, so you don't have to re-enter it on every run.

Expand Down
2 changes: 1 addition & 1 deletion strix/config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class LlmSettings(BaseSettings):
model: str | None = Field(default=None, alias="STRIX_LLM")
api_key: str | None = Field(
default=None,
validation_alias=AliasChoices("LLM_API_KEY", "OPENAI_API_KEY"),
validation_alias=AliasChoices("LLM_API_KEY", "OPENAI_API_KEY", "GROQ_API_KEY"),
Comment thread
DanielNg0729 marked this conversation as resolved.
Outdated
Comment thread
DanielNg0729 marked this conversation as resolved.
Outdated
)
api_base: str | None = Field(
default=None,
Expand Down
17 changes: 17 additions & 0 deletions tests/test_config_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"STRIX_LLM",
"LLM_API_KEY",
"OPENAI_API_KEY",
"GROQ_API_KEY",
"LLM_API_BASE",
"OPENAI_API_BASE",
"OPENAI_BASE_URL",
Expand Down Expand Up @@ -150,6 +151,22 @@ def test_apply_config_override_invalidates_cache(tmp_path: Path) -> None:
assert loader.load_settings().llm.model == "second-model"


# --------------------------------------------------------------------------- #
# LLM key aliases
# --------------------------------------------------------------------------- #


def test_groq_api_key_alias_populates_llm_key(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("GROQ_API_KEY", "gsk-test")
assert loader.load_settings().llm.api_key == "gsk-test"


def test_llm_api_key_takes_precedence_over_groq(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("LLM_API_KEY", "primary")
monkeypatch.setenv("GROQ_API_KEY", "gsk-test")
assert loader.load_settings().llm.api_key == "primary"


# --------------------------------------------------------------------------- #
# persist_current
# --------------------------------------------------------------------------- #
Expand Down