fix(openai): keep web_search_options when a chat completions request bridges to the Responses API

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
mateo 2026-10-31 22:16:24 +00:00
parent 6aa546303e
commit d93d5a466b
3 changed files with 37 additions and 3 deletions

View file

@ -6048,15 +6048,21 @@ def completion(
bridges_to_responses_api: Final = (
responses_api_model_info.get("mode") == "responses" and not skip_responses_api_bridge
)
allowed_openai_params: Final[list[str] | None] = (
[*(kwargs.get("allowed_openai_params") or []), "reasoning_effort"]
bridge_allowed_params: Final[tuple[str, ...]] = (
("reasoning_effort", "web_search_options")
if bridges_to_responses_api
or reasoning_effort_needs_allowing(
else ("reasoning_effort",)
if reasoning_effort_needs_allowing(
chat_reasoning.effort,
model=model,
custom_llm_provider=custom_llm_provider,
base_model=base_model if isinstance(base_model, str) else None,
)
else ()
)
allowed_openai_params: Final[list[str] | None] = (
[*(kwargs.get("allowed_openai_params") or []), *bridge_allowed_params]
if bridge_allowed_params
else kwargs.get("allowed_openai_params")
)
optional_param_args: Final = {

View file

@ -0,0 +1,28 @@
from dataclasses import replace
from typing import Final
import pytest
from integration._support.client import Gateway
from integration._support.provider import SharedProvider
from integration.translation.case import TranslationTestCase
from integration.translation.chat_completions.bases.openai_responses import GPT_5_6_SOL_TEST_CASE
from integration.translation.runner import assert_translation
GPT_5_6_SOL_WEB_SEARCH_TEST_CASE: Final = replace(
GPT_5_6_SOL_TEST_CASE,
scenario="web_search_options",
litellm_request={**GPT_5_6_SOL_TEST_CASE.litellm_request, "web_search_options": {"search_context_size": "low"}},
expected_provider_request={
**GPT_5_6_SOL_TEST_CASE.expected_provider_request,
"tools": [{"type": "web_search", "search_context_size": "low"}],
},
)
CASES: Final = (GPT_5_6_SOL_WEB_SEARCH_TEST_CASE,)
@pytest.mark.parametrize("case", CASES, ids=lambda case: case.id)
def test_chat_completions_params_openai_responses_web_search(
case: TranslationTestCase, gateway: Gateway, provider: SharedProvider
) -> None:
assert_translation(case, gateway, provider)