From 3d2f14e3c07c16ab36b11abb04f9684e982290aa Mon Sep 17 00:00:00 2001 From: Shayan Ali <217162076+shayanxcyber@users.noreply.github.com> Date: Fri, 23 Oct 2026 12:35:10 +1100 Subject: [PATCH] Use model key presence when resolving get defaults --- ollama/_types.py | 2 +- tests/test_type_mapping.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/test_type_mapping.py diff --git a/ollama/_types.py b/ollama/_types.py index ad041013..cc8df473 100644 --- a/ollama/_types.py +++ b/ollama/_types.py @@ -98,7 +98,7 @@ def get(self, key: str, default: Any = None) -> Any: >>> msg.get('tool_calls')[0]['function']['name'] 'foo' """ - return getattr(self, key) if hasattr(self, key) else default + return getattr(self, key) if key in self else default class Options(SubscriptableBaseModel): diff --git a/tests/test_type_mapping.py b/tests/test_type_mapping.py new file mode 100644 index 00000000..0f20a58b --- /dev/null +++ b/tests/test_type_mapping.py @@ -0,0 +1,23 @@ +import pytest + +from ollama import Message, Tool + + +@pytest.mark.parametrize('key', ['content', 'model_dump', 'nonexistent']) +def test_get_missing_key_uses_default(key): + message = Message(role='assistant') + fallback = object() + + with pytest.raises(KeyError): + message[key] + assert message.get(key, fallback) is fallback + + +@pytest.mark.parametrize('content', [None, '']) +def test_get_preserves_explicit_values(content): + message = Message(role='assistant', content=content) + assert message.get('content', 'fallback') == content + + +def test_get_preserves_model_default(): + assert Tool().get('type', 'fallback') == 'function'