mirror of
https://github.com/usestrix/strix.git
synced 2026-08-23 19:32:37 +02:00
Re-architects the agent loop to support interactive (chat-like) mode where text-only responses pause execution and wait for user input, while tool-call responses continue looping autonomously. - Add `interactive` flag to LLMConfig (default False, no regression) - Add configurable `waiting_timeout` to AgentState (0 = disabled) - _process_iteration returns None for text-only → agent_loop pauses - Conditional system prompt: interactive allows natural text responses - Skip <meta>Continue the task.</meta> injection in interactive mode - Sub-agents inherit interactive from parent (300s auto-resume timeout) - Root interactive agents wait indefinitely for user input (timeout=0) - TUI sets interactive=True; CLI unchanged (non_interactive=True)
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
from strix.config import Config
|
|
from strix.config.config import resolve_llm_config
|
|
from strix.llm.utils import resolve_strix_model
|
|
|
|
|
|
class LLMConfig:
|
|
def __init__(
|
|
self,
|
|
model_name: str | None = None,
|
|
enable_prompt_caching: bool = True,
|
|
skills: list[str] | None = None,
|
|
timeout: int | None = None,
|
|
scan_mode: str = "deep",
|
|
interactive: bool = False,
|
|
):
|
|
resolved_model, self.api_key, self.api_base = resolve_llm_config()
|
|
self.model_name = model_name or resolved_model
|
|
|
|
if not self.model_name:
|
|
raise ValueError("STRIX_LLM environment variable must be set and not empty")
|
|
|
|
api_model, canonical = resolve_strix_model(self.model_name)
|
|
self.litellm_model: str = api_model or self.model_name
|
|
self.canonical_model: str = canonical or self.model_name
|
|
|
|
self.enable_prompt_caching = enable_prompt_caching
|
|
self.skills = skills or []
|
|
|
|
self.timeout = timeout or int(Config.get("llm_timeout") or "300")
|
|
|
|
self.scan_mode = scan_mode if scan_mode in ["quick", "standard", "deep"] else "deep"
|
|
|
|
self.interactive = interactive
|