feat(config): accept GROQ_API_KEY for Groq-hosted models

Add GROQ_API_KEY as an accepted alias for the LLM key alongside
LLM_API_KEY / OPENAI_API_KEY, so STRIX_LLM="groq/<model>" works with a
provider-native key. Groq models already route through LiteLLM (which
mirrors the configured key to GROQ_API_KEY), so this wires up the alias
plus docs and tests.

Signed-off-by: Daniel Nguyen <danielnguyenh07@gmail.com>
This commit is contained in:
Daniel Nguyen 2026-07-04 00:29:55 +08:00
parent 302efedca6
commit 2647b2d499
3 changed files with 27 additions and 1 deletions

View file

@ -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.

View file

@ -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"),
)
api_base: str | None = Field(
default=None,

View file

@ -20,6 +20,7 @@ _LLM_ENV_KEYS = [
"STRIX_LLM",
"LLM_API_KEY",
"OPENAI_API_KEY",
"GROQ_API_KEY",
"LLM_API_BASE",
"OPENAI_API_BASE",
"OPENAI_BASE_URL",
@ -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
# --------------------------------------------------------------------------- #