fix(ollama): unwrap any Mapping reasoning_effort, not only dict

responses_api_bridge_check accepts Mapping[str, object], so a read-only
mapping reached the same set membership check and raised the same TypeError
This commit is contained in:
woongstardev 2026-09-22 21:00:06 +09:00
parent d15aa0c89b
commit da7ec892af
4 changed files with 11 additions and 5 deletions

View file

@ -171,7 +171,7 @@ class OllamaChatConfig(BaseConfig):
if value.get("json_schema") and value["json_schema"].get("schema"):
optional_params["format"] = value["json_schema"]["schema"]
if param == "reasoning_effort" and value is not None:
effort: Final = value.get("effort") if isinstance(value, dict) else value
effort: Final = value.get("effort") if isinstance(value, Mapping) else value
if effort is not None:
if model.startswith("gpt-oss"):
optional_params["think"] = effort

View file

@ -1,6 +1,6 @@
import json
import time
from collections.abc import AsyncIterator, Iterator
from collections.abc import AsyncIterator, Iterator, Mapping
from typing import TYPE_CHECKING, Any, Final
from httpx._models import Headers, Response
@ -215,7 +215,7 @@ class OllamaConfig(BaseConfig):
elif param == "stop":
optional_params["stop"] = value
elif param == "reasoning_effort" and value is not None:
effort: Final = value.get("effort") if isinstance(value, dict) else value
effort: Final = value.get("effort") if isinstance(value, Mapping) else value
if effort is not None:
if model.startswith("gpt-oss"):
optional_params["think"] = effort

View file

@ -1,6 +1,8 @@
import inspect
import os
import sys
from collections.abc import Mapping
from types import MappingProxyType
from typing import Final, cast
import pytest
@ -1000,11 +1002,12 @@ class TestOllamaChatReasoningEffort:
("none", False),
({"effort": "medium"}, True),
({"effort": "medium", "summary": "auto"}, True),
(MappingProxyType({"effort": "medium", "summary": "auto"}), True),
({"effort": "none", "summary": "detailed"}, False),
],
)
def test_reasoning_effort_string_or_dict_maps_to_think(
self, reasoning_effort: str | dict[str, str], expected_think: bool
self, reasoning_effort: str | Mapping[str, str], expected_think: bool
) -> None:
optional_params: Final = get_optional_params(
model="ollama_chat/qwen3:8b",

View file

@ -2,6 +2,8 @@ import base64
import io
import json
import sys
from collections.abc import Mapping
from types import MappingProxyType
from typing import Final
from litellm._uuid import uuid
from unittest.mock import MagicMock, patch
@ -784,11 +786,12 @@ class TestOllamaConfigReasoningEffort:
[
("medium", True),
({"effort": "medium", "summary": "auto"}, True),
(MappingProxyType({"effort": "medium", "summary": "auto"}), True),
({"effort": "none"}, False),
],
)
def test_reasoning_effort_string_or_dict_maps_to_think(
self, reasoning_effort: str | dict[str, str], expected_think: bool
self, reasoning_effort: str | Mapping[str, str], expected_think: bool
) -> None:
optional_params: Final = OllamaConfig().map_openai_params(
non_default_params={"reasoning_effort": reasoning_effort},