Fix/supported llm params (#3290)
This commit is contained in:
@@ -6,6 +6,8 @@ title: OpenAI
|
|||||||
|
|
||||||
To use OpenAI LLM models, you have to set the `OPENAI_API_KEY` environment variable. You can obtain the OpenAI API key from the [OpenAI Platform](https://platform.openai.com/account/api-keys).
|
To use OpenAI LLM models, you have to set the `OPENAI_API_KEY` environment variable. You can obtain the OpenAI API key from the [OpenAI Platform](https://platform.openai.com/account/api-keys).
|
||||||
|
|
||||||
|
> **Note**: The following are currently unsupported with reasoning models `Parallel tool calling`,`temperature`, `top_p`, `presence_penalty`, `frequency_penalty`, `logprobs`, `top_logprobs`, `logit_bias`, `max_tokens`
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
<CodeGroup>
|
<CodeGroup>
|
||||||
|
|||||||
@@ -70,8 +70,7 @@ class AnthropicLLM(LLMBase):
|
|||||||
else:
|
else:
|
||||||
filtered_messages.append(message)
|
filtered_messages.append(message)
|
||||||
|
|
||||||
# Get common parameters
|
params = self._get_supported_params(messages=messages, **kwargs)
|
||||||
params = self._get_common_params(**kwargs)
|
|
||||||
params.update(
|
params.update(
|
||||||
{
|
{
|
||||||
"model": self.config.model,
|
"model": self.config.model,
|
||||||
|
|||||||
@@ -110,27 +110,13 @@ class AzureOpenAILLM(LLMBase):
|
|||||||
|
|
||||||
messages[-1]["content"] = user_prompt
|
messages[-1]["content"] = user_prompt
|
||||||
|
|
||||||
# Get common parameters
|
params = self._get_supported_params(messages=messages, **kwargs)
|
||||||
params = self._get_common_params(**kwargs)
|
|
||||||
params.update(
|
# Add model and messages
|
||||||
{
|
params.update({
|
||||||
"model": self.config.model,
|
"model": self.config.model,
|
||||||
"messages": messages,
|
"messages": messages,
|
||||||
}
|
})
|
||||||
)
|
|
||||||
|
|
||||||
if self.config.model in {"o3-mini", "o1-preview", "o1"}:
|
|
||||||
# Use common params for these models
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
# Add additional parameters for other models
|
|
||||||
params.update(
|
|
||||||
{
|
|
||||||
"temperature": self.config.temperature,
|
|
||||||
"max_tokens": self.config.max_tokens,
|
|
||||||
"top_p": self.config.top_p,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
if tools:
|
if tools:
|
||||||
params["tools"] = tools
|
params["tools"] = tools
|
||||||
|
|||||||
@@ -40,6 +40,60 @@ class LLMBase(ABC):
|
|||||||
# This will be handled by individual providers
|
# This will be handled by individual providers
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _is_reasoning_model(self, model: str) -> bool:
|
||||||
|
"""
|
||||||
|
Check if the model is a reasoning model or GPT-5 series that doesn't support certain parameters.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
model: The model name to check
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if the model is a reasoning model or GPT-5 series
|
||||||
|
"""
|
||||||
|
reasoning_models = {
|
||||||
|
"o1", "o1-preview", "o3-mini", "o3",
|
||||||
|
"gpt-5", "gpt-5o", "gpt-5o-mini", "gpt-5o-micro",
|
||||||
|
}
|
||||||
|
|
||||||
|
if model.lower() in reasoning_models:
|
||||||
|
return True
|
||||||
|
|
||||||
|
model_lower = model.lower()
|
||||||
|
if any(reasoning_model in model_lower for reasoning_model in ["gpt-5", "o1", "o3"]):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _get_supported_params(self, **kwargs) -> Dict:
|
||||||
|
"""
|
||||||
|
Get parameters that are supported by the current model.
|
||||||
|
Filters out unsupported parameters for reasoning models and GPT-5 series.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
**kwargs: Additional parameters to include
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dict: Filtered parameters dictionary
|
||||||
|
"""
|
||||||
|
model = getattr(self.config, 'model', '')
|
||||||
|
|
||||||
|
if self._is_reasoning_model(model):
|
||||||
|
supported_params = {}
|
||||||
|
|
||||||
|
if "messages" in kwargs:
|
||||||
|
supported_params["messages"] = kwargs["messages"]
|
||||||
|
if "response_format" in kwargs:
|
||||||
|
supported_params["response_format"] = kwargs["response_format"]
|
||||||
|
if "tools" in kwargs:
|
||||||
|
supported_params["tools"] = kwargs["tools"]
|
||||||
|
if "tool_choice" in kwargs:
|
||||||
|
supported_params["tool_choice"] = kwargs["tool_choice"]
|
||||||
|
|
||||||
|
return supported_params
|
||||||
|
else:
|
||||||
|
# For regular models, include all common parameters
|
||||||
|
return self._get_common_params(**kwargs)
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def generate_response(
|
def generate_response(
|
||||||
self, messages: List[Dict[str, str]], tools: Optional[List[Dict]] = None, tool_choice: str = "auto", **kwargs
|
self, messages: List[Dict[str, str]], tools: Optional[List[Dict]] = None, tool_choice: str = "auto", **kwargs
|
||||||
|
|||||||
@@ -91,8 +91,7 @@ class DeepSeekLLM(LLMBase):
|
|||||||
Returns:
|
Returns:
|
||||||
str: The generated response.
|
str: The generated response.
|
||||||
"""
|
"""
|
||||||
# Get common parameters
|
params = self._get_supported_params(messages=messages, **kwargs)
|
||||||
params = self._get_common_params(**kwargs)
|
|
||||||
params.update(
|
params.update(
|
||||||
{
|
{
|
||||||
"model": self.config.model,
|
"model": self.config.model,
|
||||||
|
|||||||
@@ -91,8 +91,7 @@ class LMStudioLLM(LLMBase):
|
|||||||
Returns:
|
Returns:
|
||||||
str: The generated response.
|
str: The generated response.
|
||||||
"""
|
"""
|
||||||
# Get common parameters
|
params = self._get_supported_params(messages=messages, **kwargs)
|
||||||
params = self._get_common_params(**kwargs)
|
|
||||||
params.update(
|
params.update(
|
||||||
{
|
{
|
||||||
"model": self.config.model,
|
"model": self.config.model,
|
||||||
@@ -100,13 +99,11 @@ class LMStudioLLM(LLMBase):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Handle response format - LM Studio defaults to json_object
|
|
||||||
if self.config.lmstudio_response_format:
|
if self.config.lmstudio_response_format:
|
||||||
params["response_format"] = self.config.lmstudio_response_format
|
params["response_format"] = self.config.lmstudio_response_format
|
||||||
elif response_format:
|
elif response_format:
|
||||||
params["response_format"] = response_format
|
params["response_format"] = response_format
|
||||||
else:
|
else:
|
||||||
# Default to json_object for LM Studio
|
|
||||||
params["response_format"] = {"type": "json_object"}
|
params["response_format"] = {"type": "json_object"}
|
||||||
|
|
||||||
if tools:
|
if tools:
|
||||||
|
|||||||
+6
-8
@@ -101,14 +101,12 @@ class OpenAILLM(LLMBase):
|
|||||||
Returns:
|
Returns:
|
||||||
json: The generated response.
|
json: The generated response.
|
||||||
"""
|
"""
|
||||||
# Get common parameters
|
params = self._get_supported_params(messages=messages, **kwargs)
|
||||||
params = self._get_common_params(**kwargs)
|
|
||||||
params.update(
|
params.update({
|
||||||
{
|
"model": self.config.model,
|
||||||
"model": self.config.model,
|
"messages": messages,
|
||||||
"messages": messages,
|
})
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
if os.getenv("OPENROUTER_API_KEY"):
|
if os.getenv("OPENROUTER_API_KEY"):
|
||||||
openrouter_params = {}
|
openrouter_params = {}
|
||||||
|
|||||||
+1
-2
@@ -91,8 +91,7 @@ class VllmLLM(LLMBase):
|
|||||||
Returns:
|
Returns:
|
||||||
str: The generated response.
|
str: The generated response.
|
||||||
"""
|
"""
|
||||||
# Get common parameters
|
params = self._get_supported_params(messages=messages, **kwargs)
|
||||||
params = self._get_common_params(**kwargs)
|
|
||||||
params.update(
|
params.update(
|
||||||
{
|
{
|
||||||
"model": self.config.model,
|
"model": self.config.model,
|
||||||
|
|||||||
Reference in New Issue
Block a user