Warn when configured LLM is not frontier-recommended (#586)

Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
This commit is contained in:
devin-ai-integration[bot]
2026-07-13 17:41:44 -07:00
committed by GitHub
co-authored by Ahmed Allam
parent daf39a2305
commit b959d528a2
6 changed files with 237 additions and 7 deletions
+30 -2
View File
@@ -23,9 +23,11 @@ from strix.config import (
persist_current,
)
from strix.config.models import (
RECOMMENDED_MODEL_NAMES,
StrixProvider,
configure_sdk_model_defaults,
is_known_openai_bare_model,
is_recommended_or_frontier_model,
)
from strix.core.paths import run_dir_for, runtime_state_dir
from strix.interface.cli import run_cli
@@ -264,7 +266,7 @@ def _provider_import_hint(exc: BaseException, model: str) -> str | None:
return None
async def warm_up_llm() -> None:
async def warm_up_llm(show_model_warning: bool = True) -> None:
console = Console()
logger.info("Warming up LLM connection")
@@ -306,6 +308,32 @@ async def warm_up_llm() -> None:
)
sys.exit(1)
if show_model_warning and raw_model and not is_recommended_or_frontier_model(raw_model):
warn_text = Text()
warn_text.append("MODEL QUALITY WARNING", style="bold yellow")
warn_text.append("\n\n", style="white")
warn_text.append(f"'{raw_model}'", style="bold cyan")
warn_text.append(
" is not a recommended frontier model for Strix.\nSecurity scans work best with:\n",
style="white",
)
for recommended_model in RECOMMENDED_MODEL_NAMES:
warn_text.append(f"{recommended_model}\n", style="bold cyan")
warn_text.append(
"\nYou can continue, but weaker models may miss vulnerabilities "
"or produce lower-quality findings.",
style="white",
)
console.print(
Panel(
warn_text,
title="[bold white]STRIX",
title_align="left",
border_style="yellow",
padding=(1, 2),
),
)
model = StrixProvider().get_model(raw_model)
await asyncio.wait_for(
model.get_response(
@@ -827,7 +855,7 @@ def main() -> None:
pull_docker_image()
validate_environment()
asyncio.run(warm_up_llm())
asyncio.run(warm_up_llm(show_model_warning=args.non_interactive))
persist_current()
+28 -3
View File
@@ -31,6 +31,7 @@ from textual.widgets import Button, Label, Static, TextArea, Tree
from textual.widgets.tree import TreeNode
from strix.config import load_settings
from strix.config.models import is_recommended_or_frontier_model
from strix.core.hooks import BudgetExceededError
from strix.core.runner import run_strix_scan
from strix.interface.tui.live_view import TuiLiveView
@@ -116,9 +117,16 @@ class SplashScreen(Static): # type: ignore[misc]
self._animation_timer: Timer | None = None
self._panel_static: Static | None = None
self._version = "dev"
self._non_frontier_model: str | None = None
def compose(self) -> ComposeResult:
self._version = get_package_version()
try:
model = (load_settings().llm.model or "").strip()
except Exception:
model = ""
if model and not is_recommended_or_frontier_model(model):
self._non_frontier_model = model
self._animation_step = 0
start_line = self._build_start_line_text(self._animation_step)
panel = self._build_panel(start_line)
@@ -145,7 +153,7 @@ class SplashScreen(Static): # type: ignore[misc]
self._panel_static.update(panel)
def _build_panel(self, start_line: Text) -> Panel:
content = Group(
rows = [
Align.center(Text(self.BANNER.strip("\n"), style=self.PRIMARY_GREEN, justify="center")),
Align.center(Text(" ")),
Align.center(self._build_welcome_text()),
@@ -155,9 +163,26 @@ class SplashScreen(Static): # type: ignore[misc]
Align.center(start_line.copy()),
Align.center(Text(" ")),
Align.center(self._build_url_text()),
)
]
if self._non_frontier_model:
rows.extend(
(
Align.center(Text(" ")),
Align.center(self._build_model_warning_text(self._non_frontier_model)),
)
)
return Panel.fit(content, border_style=self.PRIMARY_GREEN, padding=(1, 6))
return Panel.fit(Group(*rows), border_style=self.PRIMARY_GREEN, padding=(1, 6))
@staticmethod
def _build_model_warning_text(model: str) -> Text:
text = Text("", style=Style(color="yellow", bold=True))
text.append(model, style=Style(color="cyan", bold=True))
text.append(
" is not a recommended frontier model - pentest quality could be degraded",
style=Style(color="yellow"),
)
return text
def _build_url_text(self) -> Text:
return Text("strix.ai", style=Style(color=self.PRIMARY_GREEN, bold=True))