diff --git a/analytics/trace_comparison_rules/src/llm_client.py b/analytics/trace_comparison_rules/src/llm_client.py index 88e16bb..d56d015 100644 --- a/analytics/trace_comparison_rules/src/llm_client.py +++ b/analytics/trace_comparison_rules/src/llm_client.py @@ -5,6 +5,7 @@ import logging import os +import re from typing import Optional import litellm @@ -17,6 +18,14 @@ # Drop unsupported params (e.g. 'seed') silently for providers that don't accept them. litellm.drop_params = True +# Claude 4.x deprecated the `temperature` parameter entirely. +_CLAUDE4_RE = re.compile(r"claude-(opus|sonnet|haiku)-4[-_]", re.IGNORECASE) + + +def _model_supports_temperature(model: str) -> bool: + return not _CLAUDE4_RE.search(model) + + # Configuration constants DEFAULT_MODEL = "Azure/gpt-4.1" @@ -93,10 +102,12 @@ def analyze( {"role": "system", "content": system_message}, {"role": "user", "content": prompt}, ], - "temperature": self.temperature, "max_tokens": (max_tokens if max_tokens is not None else self.max_tokens), } + if _model_supports_temperature(self.model): + completion_args["temperature"] = self.temperature + # Add seed if provided (for reproducibility) seed_value = seed if seed is not None else self.seed if seed_value is not None: