From 6f4ca95338fdd52d40882cb7a5ce0326ec62271a Mon Sep 17 00:00:00 2001 From: 0xallam Date: Fri, 9 Jan 2026 19:35:01 -0800 Subject: [PATCH] feat: add STRIX_REASONING_EFFORT env var to control thinking effort - Add configurable reasoning effort via environment variable - Default to "high", but use "medium" for quick scan mode - Document in README and interface error panel Co-Authored-By: Claude Opus 4.5 --- README.md | 1 + strix/interface/main.py | 15 +++++++++++++++ strix/llm/llm.py | 12 +++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a6b695..9aeefee 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,7 @@ export LLM_API_KEY="your-api-key" # Optional export LLM_API_BASE="your-api-base-url" # if using a local model, e.g. Ollama, LMStudio export PERPLEXITY_API_KEY="your-api-key" # for search capabilities +export STRIX_REASONING_EFFORT="high" # control thinking effort (default: high, quick scan: medium) ``` **Recommended models for best results:** diff --git a/strix/interface/main.py b/strix/interface/main.py index a66074b..37b560f 100644 --- a/strix/interface/main.py +++ b/strix/interface/main.py @@ -67,6 +67,9 @@ def validate_environment() -> None: # noqa: PLR0912, PLR0915 if not os.getenv("PERPLEXITY_API_KEY"): missing_optional_vars.append("PERPLEXITY_API_KEY") + if not os.getenv("STRIX_REASONING_EFFORT"): + missing_optional_vars.append("STRIX_REASONING_EFFORT") + if missing_required_vars: error_text = Text() error_text.append("❌ ", style="bold red") @@ -118,6 +121,13 @@ def validate_environment() -> None: # noqa: PLR0912, PLR0915 " - API key for Perplexity AI web search (enables real-time research)\n", style="white", ) + elif var == "STRIX_REASONING_EFFORT": + error_text.append("• ", style="white") + error_text.append("STRIX_REASONING_EFFORT", style="bold cyan") + error_text.append( + " - Reasoning effort level (default: high)\n", + style="white", + ) error_text.append("\nExample setup:\n", style="white") error_text.append("export STRIX_LLM='openai/gpt-5'\n", style="dim white") @@ -140,6 +150,11 @@ def validate_environment() -> None: # noqa: PLR0912, PLR0915 error_text.append( "export PERPLEXITY_API_KEY='your-perplexity-key-here'\n", style="dim white" ) + elif var == "STRIX_REASONING_EFFORT": + error_text.append( + "export STRIX_REASONING_EFFORT='high'\n", + style="dim white", + ) panel = Panel( error_text, diff --git a/strix/llm/llm.py b/strix/llm/llm.py index fd63c30..3d6e0da 100644 --- a/strix/llm/llm.py +++ b/strix/llm/llm.py @@ -53,6 +53,9 @@ _LLM_API_BASE = ( or os.getenv("LITELLM_BASE_URL") or os.getenv("OLLAMA_API_BASE") ) +_STRIX_REASONING_EFFORT = os.getenv( + "STRIX_REASONING_EFFORT" +) # "none", "minimal", "medium", "high", or "xhigh" class LLMRequestFailedError(Exception): @@ -110,6 +113,13 @@ class LLM: self._total_stats = RequestStats() self._last_request_stats = RequestStats() + if _STRIX_REASONING_EFFORT: + self._reasoning_effort = _STRIX_REASONING_EFFORT + elif self.config.scan_mode == "quick": + self._reasoning_effort = "medium" + else: + self._reasoning_effort = "high" + self.memory_compressor = MemoryCompressor( model_name=self.config.model_name, timeout=self.config.timeout, @@ -467,7 +477,7 @@ class LLM: completion_args["stop"] = [""] if self._should_include_reasoning_effort(): - completion_args["reasoning_effort"] = "high" + completion_args["reasoning_effort"] = self._reasoning_effort queue = get_global_queue() self._total_stats.requests += 1