diff --git a/backend/app/models/llm/constants.py b/backend/app/models/llm/constants.py index a604d2a50..1a0dca634 100644 --- a/backend/app/models/llm/constants.py +++ b/backend/app/models/llm/constants.py @@ -32,6 +32,9 @@ ], } +# OpenAI models that support reasoning (effort parameter) +OPENAI_REASONING_MODELS: set[str] = {"o1", "o1-preview", "o1-mini"} + SUPPORTED_VOICES = { ("google", "tts"): ["Kore", "Orus", "Leda", "Charon"], ("sarvamai", "tts"): ["simran", "shubh", "roopa"], diff --git a/backend/app/services/llm/mappers.py b/backend/app/services/llm/mappers.py index e69b744b7..19cbd7d04 100644 --- a/backend/app/services/llm/mappers.py +++ b/backend/app/services/llm/mappers.py @@ -1,4 +1,3 @@ -import litellm import logging from app.models.llm import KaapiCompletionConfig, NativeCompletionConfig @@ -7,6 +6,7 @@ BCP47_TO_ELEVENLABS_LANG, ELEVENLABS_VOICE_TO_ID, DEFAULT_TTS_VOICE, + OPENAI_REASONING_MODELS, ) logger = logging.getLogger(__name__) @@ -67,7 +67,7 @@ def map_kaapi_to_openai_params(kaapi_params: dict) -> tuple[dict, list[str]]: knowledge_base_ids = kaapi_params.get("knowledge_base_ids") max_num_results = kaapi_params.get("max_num_results") - support_reasoning = litellm.supports_reasoning(model=f"openai/{model}") + support_reasoning = model in OPENAI_REASONING_MODELS # Handle reasoning vs temperature mutual exclusivity if support_reasoning: diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 769ac259f..6f9be27ee 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -53,6 +53,8 @@ override-dependencies = [ "cryptography>=46.0.5", "werkzeu>=3.1.6", "pypdf>=3.9.0", + # Pinned: avoid supply chain attack in litellm 1.82.7/1.82.8 (Mar 2026) + "litellm==1.82.1", ] dev-dependencies = [ "pytest<8.0.0,>=7.4.3", diff --git a/backend/uv.lock b/backend/uv.lock index 5ef8d7d9f..ed90bd176 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 2 requires-python = ">=3.12, <4.0" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", @@ -16,6 +16,7 @@ resolution-markers = [ [manifest] overrides = [ { name = "cryptography", specifier = ">=46.0.5" }, + { name = "litellm", specifier = "==1.82.1" }, { name = "pillow", specifier = ">=12.1.1" }, { name = "pypdf", specifier = ">=3.9.0" }, { name = "werkzeu", specifier = ">=3.1.6" },