From 77101a96a1e0159d9f1b5b9779c446a799213710 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Tue, 18 Mar 2025 11:57:31 -0700 Subject: [PATCH] feat: Add model setting validation for reasoning features --- aider/main.py | 8 ++++++++ aider/models.py | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/aider/main.py b/aider/main.py index 17e44b425..0f99c2379 100644 --- a/aider/main.py +++ b/aider/main.py @@ -789,10 +789,18 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F # Set reasoning effort if specified if args.reasoning_effort is not None: + if main_model.accepts_settings and "reasoning_effort" not in main_model.accepts_settings: + io.tool_warning( + f"Warning: The model {main_model.name} may not support the 'reasoning_effort' setting." + ) main_model.set_reasoning_effort(args.reasoning_effort) # Set thinking tokens if specified if args.thinking_tokens is not None: + if main_model.accepts_settings and "thinking_tokens" not in main_model.accepts_settings: + io.tool_warning( + f"Warning: The model {main_model.name} may not support the 'thinking_tokens' setting." + ) main_model.set_thinking_tokens(args.thinking_tokens) if args.copy_paste and args.edit_format is None: diff --git a/aider/models.py b/aider/models.py index cc54f03d3..4cbc81ebf 100644 --- a/aider/models.py +++ b/aider/models.py @@ -116,6 +116,7 @@ class ModelSettings: reasoning_tag: Optional[str] = None remove_reasoning: Optional[str] = None # Deprecated alias for reasoning_tag system_prompt_prefix: Optional[str] = None + accepts_settings: Optional[list] = None # Load model settings from package resource @@ -295,6 +296,10 @@ class Model(ModelSettings): exact_match = True break # Continue to apply overrides + # Initialize accepts_settings if it's None + if self.accepts_settings is None: + self.accepts_settings = [] + model = model.lower() # If no exact match, try generic settings @@ -358,7 +363,7 @@ class Model(ModelSettings): self.examples_as_sys_msg = True self.use_temperature = False self.reasoning_tag = "think" - self.reasoning_tag = "think" + self.accepts_settings = ["reasoning_effort", "thinking_tokens"] return # <-- if ("llama3" in model or "llama-3" in model) and "70b" in model: @@ -389,6 +394,7 @@ class Model(ModelSettings): self.use_repo_map = True self.examples_as_sys_msg = True self.reminder = "user" + self.accepts_settings = ["reasoning_effort"] return # <-- if model.startswith("o1-") or "/o1-" in model: