From 9395c17f3418c4c6f0451e9e9da8100b0e3a6395 Mon Sep 17 00:00:00 2001 From: Debanjum Date: Thu, 28 Aug 2025 00:49:23 -0700 Subject: [PATCH] Fix openai reasoning model handling - Fix identifying gpt-oss as openai reasoning model - Drop unsupported stop param for openai reasoning models - Drop the Formatting re-enabled logic for openai reasoing only models We use responses api for openai models and latest openai models are hybrid models, they don't seem to need this convoluted system message to format response as markdown --- src/khoj/processor/conversation/openai/utils.py | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/khoj/processor/conversation/openai/utils.py b/src/khoj/processor/conversation/openai/utils.py index 5f408844..4a6a5292 100644 --- a/src/khoj/processor/conversation/openai/utils.py +++ b/src/khoj/processor/conversation/openai/utils.py @@ -118,7 +118,9 @@ def completion_with_backoff( model_kwargs["temperature"] = 1 reasoning_effort = "medium" if deepthought else "low" model_kwargs["reasoning_effort"] = reasoning_effort + # Remove unsupported params for reasoning models model_kwargs.pop("top_p", None) + model_kwargs.pop("stop", None) elif is_twitter_reasoning_model(model_name, api_base_url): model_kwargs.pop("temperature", None) reasoning_effort = "high" if deepthought else "low" @@ -304,19 +306,6 @@ async def chat_completion_with_backoff( # Remove unsupported params for reasoning models model_kwargs.pop("top_p", None) model_kwargs.pop("stop", None) - - # Get the first system message and add the string `Formatting re-enabled` to it. - # See https://platform.openai.com/docs/guides/reasoning-best-practices - if len(formatted_messages) > 0: - system_messages = [ - (i, message) for i, message in enumerate(formatted_messages) if message["role"] == "system" - ] - if len(system_messages) > 0: - first_system_message_index, first_system_message = system_messages[0] - first_system_message_content = first_system_message["content"] - formatted_messages[first_system_message_index]["content"] = ( - f"{first_system_message_content}\nFormatting re-enabled" - ) elif is_twitter_reasoning_model(model_name, api_base_url): reasoning_effort = "high" if deepthought else "low" # Grok-4 models do not support reasoning_effort parameter @@ -851,7 +840,7 @@ def is_openai_reasoning_model(model_name: str, api_base_url: str = None) -> bool return ( is_openai_api(api_base_url) and (model_name.lower().startswith("o") or model_name.lower().startswith("gpt-5")) - or model_name.lower().startswith("gpt-oss") + or "gpt-oss" in model_name.lower() )