Fix #2729: Add force_structured_output parameter to bypass response schema check for OpenRouter models

Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
Devin AI
2025-04-30 11:54:50 +00:00
parent 25c8155609
commit 9b0fbd24ee
2 changed files with 33 additions and 3 deletions

View File

@@ -270,6 +270,7 @@ class LLM(BaseLLM):
callbacks: List[Any] = [],
reasoning_effort: Optional[Literal["none", "low", "medium", "high"]] = None,
stream: bool = False,
force_structured_output: bool = False,
**kwargs,
):
self.model = model
@@ -296,6 +297,7 @@ class LLM(BaseLLM):
self.additional_params = kwargs
self.is_anthropic = self._is_anthropic_model(model)
self.stream = stream
self.force_structured_output = force_structured_output
litellm.drop_params = True
@@ -992,9 +994,11 @@ class LLM(BaseLLM):
- If no slash is present, "openai" is assumed.
"""
provider = self._get_custom_llm_provider()
if self.response_format is not None and not supports_response_schema(
model=self.model,
custom_llm_provider=provider,
if self.response_format is not None and not (
supports_response_schema(
model=self.model,
custom_llm_provider=provider,
) or (provider == "openrouter" and self.force_structured_output)
):
raise ValueError(
f"The model {self.model} does not support response_format for provider '{provider}'. "