From e6b6e28d6bd0bc399981b14fa6de258974fb6f4a Mon Sep 17 00:00:00 2001 From: Trung Dinh Date: Fri, 21 Feb 2025 22:10:33 +0700 Subject: [PATCH 1/7] Define SUPPORT_REASONING_EFFORT_MODELS list --- pr_agent/algo/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pr_agent/algo/__init__.py b/pr_agent/algo/__init__.py index 37ca48ac..6bbbee72 100644 --- a/pr_agent/algo/__init__.py +++ b/pr_agent/algo/__init__.py @@ -101,3 +101,8 @@ NO_SUPPORT_TEMPERATURE_MODELS = [ "o3-mini-2025-01-31", "o1-preview" ] + +SUPPORT_REASONING_EFFORT_MODELS = [ + "o3-mini", + "o3-mini-2025-01-31" +] From d37732c25d068ea98c82bd364635d8bd9b6a34e6 Mon Sep 17 00:00:00 2001 From: Trung Dinh Date: Fri, 21 Feb 2025 22:10:49 +0700 Subject: [PATCH 2/7] Define ReasoningEffort enum --- pr_agent/algo/utils.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pr_agent/algo/utils.py b/pr_agent/algo/utils.py index 15b33068..32dfb826 100644 --- a/pr_agent/algo/utils.py +++ b/pr_agent/algo/utils.py @@ -50,6 +50,11 @@ class PRReviewHeader(str, Enum): REGULAR = "## PR Reviewer Guide" INCREMENTAL = "## Incremental PR Reviewer Guide" +class ReasoningEffort(str, Enum): + HIGH = "high" + MEDIUM = "medium" + LOW = "low" + class PRDescriptionHeader(str, Enum): CHANGES_WALKTHROUGH = "### **Changes walkthrough** 📝" From e81b0dca30d745905afcccb8557a01a1c2193a39 Mon Sep 17 00:00:00 2001 From: Trung Dinh Date: Fri, 21 Feb 2025 22:14:58 +0700 Subject: [PATCH 3/7] Support reasoning_effort via configuration file --- pr_agent/settings/configuration.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pr_agent/settings/configuration.toml b/pr_agent/settings/configuration.toml index ad09243a..d198e557 100644 --- a/pr_agent/settings/configuration.toml +++ b/pr_agent/settings/configuration.toml @@ -48,6 +48,7 @@ ignore_pr_authors = [] # authors to ignore from PR agent when an PR is created # is_auto_command = false # will be auto-set to true if the command is triggered by an automation enable_ai_metadata = false # will enable adding ai metadata +reasoning_effort = "medium" # "low", "medium", "high" [pr_reviewer] # /review # # enable/disable features From 9abb212e83126187d1ee8e61eb3ca8c8f6f825e2 Mon Sep 17 00:00:00 2001 From: Trung Dinh Date: Fri, 21 Feb 2025 22:16:18 +0700 Subject: [PATCH 4/7] Add reasoning_effort argument to chat completion request --- pr_agent/algo/ai_handlers/litellm_ai_handler.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pr_agent/algo/ai_handlers/litellm_ai_handler.py b/pr_agent/algo/ai_handlers/litellm_ai_handler.py index b22b834e..512ea52d 100644 --- a/pr_agent/algo/ai_handlers/litellm_ai_handler.py +++ b/pr_agent/algo/ai_handlers/litellm_ai_handler.py @@ -6,9 +6,9 @@ import requests from litellm import acompletion from tenacity import retry, retry_if_exception_type, stop_after_attempt -from pr_agent.algo import NO_SUPPORT_TEMPERATURE_MODELS, USER_MESSAGE_ONLY_MODELS +from pr_agent.algo import NO_SUPPORT_TEMPERATURE_MODELS, SUPPORT_REASONING_EFFORT_MODELS, USER_MESSAGE_ONLY_MODELS from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler -from pr_agent.algo.utils import get_version +from pr_agent.algo.utils import ReasoningEffort, get_version from pr_agent.config_loader import get_settings from pr_agent.log import get_logger @@ -101,6 +101,9 @@ class LiteLLMAIHandler(BaseAiHandler): # Model that doesn't support temperature argument self.no_support_temperature_models = NO_SUPPORT_TEMPERATURE_MODELS + # Models that support reasoning effort + self.support_reasoning_models = SUPPORT_REASONING_EFFORT_MODELS + def prepare_logs(self, response, system, user, resp, finish_reason): response_log = response.dict().copy() response_log['system'] = system @@ -230,6 +233,13 @@ class LiteLLMAIHandler(BaseAiHandler): if model not in self.no_support_temperature_models and not get_settings().config.custom_reasoning_model: kwargs["temperature"] = temperature + # Add reasoning_effort if model supports it + if (model in self.support_reasoning_models): + supported_reasoning_efforts = [ReasoningEffort.HIGH.value, ReasoningEffort.MEDIUM.value, ReasoningEffort.LOW.value] + reasoning_effort = get_settings().config.reasoning_effort if (get_settings().config.reasoning_effort in supported_reasoning_efforts) else ReasoningEffort.MEDIUM.value + get_logger().info(f"Add reasoning_effort with value {reasoning_effort} to model {model}.") + kwargs["reasoning_effort"] = reasoning_effort + if get_settings().litellm.get("enable_callbacks", False): kwargs = self.add_litellm_callbacks(kwargs) From 37083ae3540191964796f6ddafb8a10309318741 Mon Sep 17 00:00:00 2001 From: Trung Dinh Date: Sat, 22 Feb 2025 22:19:58 +0700 Subject: [PATCH 5/7] Improve logging for adding parameters: temperature and reasoning_effort --- pr_agent/algo/ai_handlers/litellm_ai_handler.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pr_agent/algo/ai_handlers/litellm_ai_handler.py b/pr_agent/algo/ai_handlers/litellm_ai_handler.py index 512ea52d..e3d9a94e 100644 --- a/pr_agent/algo/ai_handlers/litellm_ai_handler.py +++ b/pr_agent/algo/ai_handlers/litellm_ai_handler.py @@ -231,13 +231,14 @@ class LiteLLMAIHandler(BaseAiHandler): # Add temperature only if model supports it if model not in self.no_support_temperature_models and not get_settings().config.custom_reasoning_model: + get_logger().info(f"Adding temperature with value {temperature} to model {model}.") kwargs["temperature"] = temperature # Add reasoning_effort if model supports it if (model in self.support_reasoning_models): supported_reasoning_efforts = [ReasoningEffort.HIGH.value, ReasoningEffort.MEDIUM.value, ReasoningEffort.LOW.value] reasoning_effort = get_settings().config.reasoning_effort if (get_settings().config.reasoning_effort in supported_reasoning_efforts) else ReasoningEffort.MEDIUM.value - get_logger().info(f"Add reasoning_effort with value {reasoning_effort} to model {model}.") + get_logger().info(f"Adding reasoning_effort with value {reasoning_effort} to model {model}.") kwargs["reasoning_effort"] = reasoning_effort if get_settings().litellm.get("enable_callbacks", False): From fa1eda967f1d8b3aff71ec6d88c55c03a0adae19 Mon Sep 17 00:00:00 2001 From: Kenny Dizi Date: Wed, 26 Feb 2025 07:53:54 +0700 Subject: [PATCH 6/7] Add document for OpenAI models dedicated parameters --- docs/docs/usage-guide/changing_a_model.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/docs/usage-guide/changing_a_model.md b/docs/docs/usage-guide/changing_a_model.md index c4928e19..25b40f0d 100644 --- a/docs/docs/usage-guide/changing_a_model.md +++ b/docs/docs/usage-guide/changing_a_model.md @@ -204,3 +204,12 @@ custom_model_max_tokens= ... 4. Most reasoning models do not support chat-style inputs (`system` and `user` messages) or temperature settings. To bypass chat templates and temperature controls, set `config.custom_reasoning_model = true` in your configuration file. + +## Dedicated parameters + +### OpenAI models + +[config] +reasoning_efffort= = "medium" # "low", "medium", "high" + +With the OpenAI models that support reasoning effort (eg: o3-mini), you can specify its reasoning effort via `config` section. The default value is `medium`, you change it to `high` or `low` based on usages. From d097266c38d60b5ea26fda1afe4dabd227f60349 Mon Sep 17 00:00:00 2001 From: Kenny Dizi Date: Wed, 26 Feb 2025 07:57:22 +0700 Subject: [PATCH 7/7] Fix typo in document --- docs/docs/usage-guide/changing_a_model.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/usage-guide/changing_a_model.md b/docs/docs/usage-guide/changing_a_model.md index 25b40f0d..c4cc0224 100644 --- a/docs/docs/usage-guide/changing_a_model.md +++ b/docs/docs/usage-guide/changing_a_model.md @@ -212,4 +212,4 @@ To bypass chat templates and temperature controls, set `config.custom_reasoning_ [config] reasoning_efffort= = "medium" # "low", "medium", "high" -With the OpenAI models that support reasoning effort (eg: o3-mini), you can specify its reasoning effort via `config` section. The default value is `medium`, you change it to `high` or `low` based on usages. +With the OpenAI models that support reasoning effort (eg: o3-mini), you can specify its reasoning effort via `config` section. The default value is `medium`. You can change it to `high` or `low` based on your usage.